SQL -Oracle - возвращает результаты в точном порядке на входе, введенном на экране BO - Решение обновлено - PullRequest
0 голосов
/ 22 ноября 2018

Я использовал приведенный ниже запрос для получения значений Dateofbirth и Mark.

SELECT b.Subject_name, a.Empnum, Dateofbirth,b.mark   
FROM Employee a, Subject b
WHERE a.Empnum = b.Empnum 
AND Empnum in (<promptval1>)
AND b.Subject_name in (<promptval2>)

Я использовал этот запрос в Business Object.Предположим, что если пользователь вводит имя субъекта как MATHS, PHYSICS, CHEMISTRY и Empnum как 999, 998, 608, 611, 501, а затем оно будет переведено так в BO

SELECT b.Subject_name, a.Empnum, Dateofbirth,b.mark   
FROM Employee a, Subject b
WHERE a.Empnum = b.Empnum 
AND Empnum in (999, 998, 608, 611, 501)
AND b.Subject_name in ('MATHS', 'PHYSICS', 'CHEMISTRY')

Но мне нужно,Я хотел бы получить данные в том порядке, в котором они были введены.

Пример: здесь MATHS введен первым, поэтому мне нужно MATHS с EMPNUM во введенном порядке (999,998,608,611,511).Даже empnum должен отображаться в указанном порядке.

Мне нужен вывод, подобный этому.

Subject_name Empnum dateofbirth mark
MATHS        999    1-JAN-2000   57
MATHS        998    1-JAN-2000   58
MATHS        608    1-JAN-2000   90
MATHS        611    1-JAN-2000   23
MATHS        501    1-JAN-2000   52
PHYSICS      999    1-FEB-2000   87
PHYSICS      998    1-FEB-2000   67
PHYSICS      608    1-FEB-2000   34
PHYSICS      611    1-FEB-2000   78
PHYSICS      501    1-FEB-2000   90
CHEMISTRY    999    1-JUN-2000   55
CHEMISTRY    998    1-JUN-2000   56
CHEMISTRY    608    1-JUN-2000   59
CHEMISTRY    611    1-JUN-2000   60
CHEMISTRY    501    1-JUN-2000   61

Но результаты не приходят таким образом.Сортировка по и по группам отсортирует результаты.

Таким образом, я не получаю вышеприведенный вывод

В Business Object, когда они могут ввести все эти входные данные как 1 раз, поэтому он будет переведен, как указано выше.Так что в запросе я думаю применить некоторый номер строки, основанный на предложении IN.

Обратите внимание: ввод темы, Empnum может быть больше .. Здесь ввод темы только 3, а ввод Empnum только 5.

1 Ответ

0 голосов
/ 22 ноября 2018

Научитесь использовать правильный, явный синтаксис standard join вместе со значимыми псевдонимами таблиц.

Чтобы получить результаты в определенном порядке, вам потребуется order by.В этом случае:

SELECT s.Subject_name, e.Empnum, Dateofbirth, s.mark   
FROM Employee e JOIN
     Subject s
     ON e.Empnum = s.Empnum 
WHERE e.Empnum in (999, 998, 608, 611, 501) AND
      s.Subject_name in ('MATHS', 'PHYSICS', 'CHEMISTRY')
ORDER BY (CASE s.subject_name WHEN 'MATHS' THEN 1 WHEN 'PHYSICS' THEN 2 WHEN 'CHEMISTRY' THEN 3 ELSE 4 END),
         (CASE e.EmpNum WHEN 999 THEN 1 WHEN 998 THEN 2 WHEN 608 THEN 3 WHEN 611 THEN 4 WHEN 501 THEN 5 ELSE 6 END);
...