2011-03-09 106 views
2

我正在嘗試爲Microsoft SQL Server 2008編寫一個SQL查詢。下面是我的查詢的一個快速示例。SQL排序按列表

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

然後我想要通過動態列表中的那些ID降序,然後其餘的降序。對此有所影響。

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

我怎樣才能在動態列表中的第一個ID?

感謝

編輯 - 增加DISTINCT查詢。

編輯 - 由Shan Plourde提供的答案。

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 

回答

2

這樣的事情?

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

現在它顯示此錯誤「如果指定了SELECT DISTINCT,ORDER BY項目必須出現在選擇列表中。」 – 2011-03-09 05:26:52

+1

您必須在您的select語句中將該case表達式作爲列加入。 Ie:select *,case(''動態列表中的id')中的change_request_id時,則爲0 else 1 end,change_request_id desc as orderinglogiccolumn – 2011-03-09 05:30:29

+0

非常感謝 – 2011-03-09 05:50:24

2

您可以使用case語句,以便通過:

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

現在顯示此錯誤「ORDER BY項目必須出現在選擇列表中,如果SELECT DISTINCT被指定。「 – 2011-03-09 05:26:24

2

你可以使用兩個查詢,一個與動態的ID和其他與休息。然後使用UNION ALL運算符將它們結合在一起。

+0

我的確想到了這一點,但我從來沒有真正喜歡過工會,所以我試圖避免它。 +1雖然正確的答案。 – 2011-03-09 05:13:02

+0

'UNION'會使用列表來檢查重複項,你的意思是'UNION ALL'? – 2011-03-09 05:18:54

+0

是的,我的意思是UNION ALL - 我已經改變了答案 – 2011-03-09 05:22:53

2

試試這是@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

我假設你想的最多的命令,其中1場是ID的動態列表,然後通過FIELD1下降。

ORDER BY CASE WHEN field1 IN ('dynamic list of ids') THEN field1 ELSE 0 END DESC, 
     field1 DESC 
+0

現在它顯示這個錯誤「如果SELECT DISTINCT被指定,ORDER BY項目必須出現在選擇列表中。」 – 2011-03-09 05:27:31

2

嘗試加入了大量以field1

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

您將需要確保大數量比field1任何的數字大。

+0

現在顯示此錯誤「如果指定了SELECT DISTINCT,ORDER BY項目必須出現在選擇列表中。」 – 2011-03-09 05:27:12

+0

您可能需要使用ORDER BY子句作爲附加字段將查詢包裝到子選擇中,然後按頂級查詢中的排序進行排序... – 2011-03-09 05:30:30