У меня есть таблица сотрудников ID_EMPLOYEE_MASTER с полями
EMP_CODE,
EMP_NAME,
EMP_JOIN_DATE,
EMP_STATUS,
EMP_BASIC,
EMP_ACCOUNT,
EMP_BANK
Я хочу запросить всех сотрудников, чей статус - «P», т.е. НАСТОЯЩИЙ, ИХ БАНКОВСКИЙ АККАУНТ, т.е. EMP_ACCOUNT, ИХ БАЗОВЫЙ, т.е. EMP_BASIC, ИХ ИМЯ, т.е.
Я пробовал следующий запрос:
SELECT'01'||TO_CHAR(SYSDATE,'MMYY')||RPAD(EMP_ACCOUNT,16,'0')||
LPAD(EMP_BASIC,18,'0')||RPAD(EMP_NAME,32,'0')||LPAD(ROWNUM,4,'0')||
LPAD(EMP_CODE,10,'0') AS " "
FROM ID_EMPLOYEE_MASTER WHERE EMP_STATUS='P'
AND EMP_BANK='BM_CB' ORDER BY EMP_JOIN_DATE,ROWNUM
Хотелось бы, чтобы формат отображения был:
0115090023194700084016000000000002112000DILIPKUMARAG00000000000000000000010000000029
Проблема в том, что результат не отображается должным образом.
Если Дилип Кумар является самым старым сотрудником, его имя отображается первым, но его порядковый номер отображается не как EMP_CODE, а как 0001.
Другая проблема - это зарплата, я бы хотел, чтобы она отображалась в OMANI RIALS и некоторых BAISA, что на 3 знака после запятой, но я не могу отобразить DAISA, отображаются только RIALS. Результат, который я получаю, выглядит следующим образом:
0115090023194700084016000000000000002112DILIPKUMARAG0000000000000000000130000000029
Помогите, пожалуйста...:(
СВЯТОЙ ДЕРЬМО, ЧТО МНОГО ГЛАВНЫХ !!!! :)
Трудное решение, для чего его закрывать - но заглавные буквы довольно оскорбительны.
Хех, теперь еще смешнее, когда первое предложение все спокойно и красиво написано.
Я потихоньку снимаю все шапки.
Готово, все, что я оставил в кепках, я толком не понимал, может быть, кто-то еще может порезать.
Хорошо, это исправлено, я говорю, откройте его.





ROWNUM назначается по мере извлечения строк до применения ORDER BY. Таким образом, они не будут выходить в той последовательности, в которой вы хотите. Есть несколько разных приемов, которые вы можете использовать.
(1) Вложенные запросы
SELECT <your long expression here> FROM (
SELECT *
FROM id_employee_master
ORDER BY emp_join_date
)
ROWNUM во внешнем запросе будут назначаться по мере того, как строки возвращаются из внутреннего запроса, поэтому они будут выводиться в том порядке, в котором вы хотите. Это своего рода взлом.
(2) Аналитическая функция
Вместо ROWNUM используйте ROW_NUMBER() OVER ( ORDER BY emp_join_date ). Это приведет к присвоению номеров на основе этого явного упорядочивания. Это гораздо более чистый способ сделать это.
По другой проблеме ... Я полагаю, EMP_BASIC - это зарплата? Если это числовой тип, то вы неявно преобразуете его в строку, и при форматировании по умолчанию будут отброшены незначительные цифры. Вы хотите использовать явный вызов TO_CHAR, чтобы указать точное форматирование, которое вы хотите.
rownum ошибается .. помнить:
SELECT *
FROM
( SELECT mt.mydata
FROM myTable mt
WHERE mt.myId = xxx
ORDER BY mt.myDate DESC
)
WHERE ROWNUM <= 1; --for example if you want last row
Измените это так, чтобы НЕ использовать все заглавные буквы. Также, пожалуйста, используйте целые, настоящие слова, такие как «должен» вместо «содрогнуться». Если вы создаете таблицы и пишете запросы в Oracle, я знаю, что вы можете это сделать.