Порядок SQL по списку - PullRequest
2 голосов
/ 09 марта 2011

Я пытаюсь написать SQL-запрос для Microsoft SQL Server 2008. Вот краткий пример моего запроса.

SELECT   DISTINCT(field1)
FROM     myDatabase
WHERE    field1 IN ('dynamic list of ids')
OR       ....lots of other conditions....

Затем я хочу упорядочить по этим идентификаторам в динамическом списке по убыванию, а затем по убыванию. Что-то на этот счет.

ORDER BY field1 IN ('dynamic list of ids') DESC, 
         field1 DESC

Как мне сначала получить идентификаторы в динамическом списке?

Спасибо

РЕДАКТИРОВАТЬ - добавлен DISTINCT к запросу.

РЕДАКТИРОВАТЬ - Ответ, предоставленный Шаном Плурдом.

SELECT   DISTINCT(field1),
         CASE 
           WHEN field1 IN ('dynamic list of ids') THEN 1
           ELSE 0
         END AS logicalOrderingColumn
FROM     myDatabase
WHERE    field1 IN ('dynamic list of ids')
OR       ....lots of other conditions....
ORDER BY logicalOrderingColumn DESC, field1 DESC

Ответы [ 6 ]

2 голосов
/ 09 марта 2011

Попробуйте добавить большое число к field1:

ORDER BY case when field1 IN ('dynamic list of ids') then 1000000 + field1 else field1 end DESC

Вам нужно убедиться, что большое число было больше, чем любое из чисел в field1.

2 голосов
/ 09 марта 2011

Я предполагаю, что вы хотите упорядочить по наибольшему числу, где поле 1 находится в динамическом списке идентификаторов, а затем по убыванию field1.

ORDER BY CASE WHEN field1 IN ('dynamic list of ids') THEN field1 ELSE 0 END DESC, 
         field1 DESC
2 голосов
/ 09 марта 2011

Попробуйте, как говорит @Heming.

SELECT   *
FROM     myDatabase
WHERE    field1 IN ('dynamic list of ids')
order by Field1 DESC
UNION ALL
SELECT   *
FROM     myDatabase
WHERE    field1 NOT IN ('dynamic list of ids')
order by Field1 DESC

Привет

2 голосов
/ 09 марта 2011

Вы можете использовать два запроса, один с динамическими идентификаторами, а другой с остальными.Затем соедините их вместе, используя оператор UNION ALL.

2 голосов
/ 09 марта 2011

Вы можете использовать операторы case по порядку:

ORDER BY case when field1 IN ('dynamic list of ids') then 1 else 0 end DESC,  field1 DESC
2 голосов
/ 09 марта 2011

как то так?

order by case when change_request_id in ('dynamic list of ids') then 0 else 1 end, 
      change_request_id desc 
...