#sql #db2
#sql #db2
Вопрос:
У меня есть сценарий, в котором я не знаю, как получить правильные результаты из-за недостатка знаний SQL и нуждаюсь в помощи.
Я понимаю, что делает команда ORDER BY; я просто не знаю, как манипулировать данными, возвращаемыми из запроса, чтобы сохранить данные в нужном мне порядке.
Ниже приведена строка SQL:
SELECT cfcif# AS "CIF Number",cfna1 AS "Customer Name" FROM cncttp08.jhadat842.cfmast cfmast WHERE cfcif#='T000714'
UNION
SELECT cfcif# AS "CIF Number",cfna1 AS "Customer Name" FROM cncttp08.jhadat842.cfmast cfmast WHERE cfcif#='T000713'
UNION
SELECT cfcif# AS "CIF Number",cfna1 AS "Customer Name" FROM cncttp08.jhadat842.cfmast cfmast WHERE cfcif#='T000715'
ORDER BY "CIF Number"
Как вы можете видеть, «Номера CIF» не в порядке, как и должно быть, и ПОРЯДОК данных упорядочен по CIF #, но мне нужно, чтобы данные действительно были не в порядке.
Ниже показано, как текущая строка возвращает данные:
T000713 | ROGER RABBITT
T000714 | JESSICA RABBIT
T000715 | JAMES KIRK
Ниже показано, как мне нужны возвращаемые данные:
T000714 | JESSICA RABBITT
T000713 | ROGER RABBITT
T000715 | JAMES KIRK
Когда я удаляю ORDER BY, возвращается следующий результат:
T000714 | JAMES KIRK
T000713 | JESSICA RABBITT
T000715 | ROGER RABBITT
Комментарии:
1. Комбинации имени / номера изменяются без
ORDER BY
? Это кажется маловероятным.
Ответ №1:
Я не понимаю, почему вы используете UNION. Вы можете сделать это следующим образом:
SELECT
cfcif# AS "CIF Number",
cfna1 AS "Customer Name"
FROM cncttp08.jhadat842.cfmast cfmast
WHERE cfcif# IN ('T000714', 'T000713', 'T000715')
ORDER BY
CASE cfcif#
WHEN 'T000714' THEN 1
WHEN 'T000713' THEN 2
WHEN 'T000715' THEN 3
END
Комментарии:
1. Спасибо. Это именно то, что мне было нужно, и отличный инструмент обучения для меня, поскольку я все еще новичок в SQL и его функциональности. Очень признателен!.
Ответ №2:
Просто!
Удалите кавычки из предложения order by. Это должно сработать. Ваш код должен быть таким, как показано ниже.
`SELECT cfcif# AS "CIF Number",cfna1 AS "Customer Name" FROM
cncttp08.jhadat842.cfmast cfmast WHERE cfcif#='T000714'
UNION
SELECT cfcif# AS "CIF Number",cfna1 AS "Customer Name" FROM
cncttp08.jhadat842.cfmast cfmast WHERE cfcif#='T000713'
UNION
SELECT cfcif# AS "CIF Number",cfna1 AS "Customer Name" FROM
cncttp08.jhadat842.cfmast cfmast WHERE cfcif#='T000715'
ORDER BY CIF Number`
Комментарии:
1. Это не сработает. Если имя столбца имеет смешанный регистр или содержит пробел, вам нужно будет заключить его в двойные кавычки
2. согласен с вашим комментарием.