Неожиданный результат SQL ORDER BY

#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. согласен с вашим комментарием.