Не удается правильно получить ожидаемый выходной сигнал объединения для SQL

Неприятности:

Не упорядочены должным образом и не выложили код / ​​или использовали соглашения, как ожидалось.

Вопрос:

Union оператор должен быть использован здесь, и с этой целью найти vendor_idуказано в третьей строке используемого кода, и его количество меньше, чем указано в последней строке кода. Код нужно будет отсортировать.

Используемый код:

SELECT job_id, po_id, 'Vendor ' || vendor_id as 'Reason'
FROM pos
WHERE vendor_id IS 'SOS'
UNION
SELECT job_id, po_id, 'Quantity < ' || quantity as 'Reason'
FROM pos
WHERE quantity < 10;

Значит получить:

job_id      po_id       Reason
----------  ----------  ------------
002         AAA         Quantiy < 10
004         CCC         Quantiy < 10
004         CCC         Vendor SOS
005         EEE         Vendor SOS
006         GGG         Quantiy < 10

Получено (от CodeRunner):

Runtime error
Program does not use the expected ORDER BY clause or is badly laid out.

См. Схему базы данных для более подробной информации (первичные ключи выделены жирным шрифтом).

Используется неизвестная СУБД. Ведет себя как PostgreSQL и не mysql,

1 ответ

Решение

Сортировать по job_id следовать po_id, просто добавь ORDER BY предложение в конце запроса. По умолчанию порядок сортировки ASC (по возрастанию), вы можете добавить DESC если вы хотите отсортировать в порядке убывания.

SELECT
    job_id, 
    po_id, 
    'Vendor ' || vendor_id as 'Reason'
FROM pos
WHERE vendor_id = 'SOS'

UNION

SELECT 
    job_id,
    po_id, 
    'Quantity < ' || quantity as 'Reason'
FROM pos
WHERE quantity < 10

ORDER BY 
    job_id,
    po_id;
Другие вопросы по тегам