我正在一個項目上工作,我有一個奇怪的要求。奇怪的SQL查詢
我有一個表A
與字段。
Orders
的值可以是0, 1, 2, 3, .......
我的任務是顯示按Orders
排序的表的內容字段。其中Orders
字段的值爲1
的行首先顯示,其餘順序依次顯示。必須在末尾顯示值爲0
的行。如果所有Orders
字段的值都是0,我需要通過TechID
字段排序表。
有關實現此目的的任何想法?這可以通過SQL查詢來實現,還是應該爲此編寫一個T-Sql腳本?
我正在一個項目上工作,我有一個奇怪的要求。奇怪的SQL查詢
我有一個表A
與字段。
Orders
的值可以是0, 1, 2, 3, .......
我的任務是顯示按Orders
排序的表的內容字段。其中Orders
字段的值爲1
的行首先顯示,其餘順序依次顯示。必須在末尾顯示值爲0
的行。如果所有Orders
字段的值都是0,我需要通過TechID
字段排序表。
有關實現此目的的任何想法?這可以通過SQL查詢來實現,還是應該爲此編寫一個T-Sql腳本?
沒有實際測試,但是,這個總體思路應該工作:
SELECT * FROM A
ORDER BY
CASE Orders WHEN 0 THEN 2147483647 ELSE Orders END,
TechID
注意:這假定Orders
是int
。如果其bigint
代替使用9,223,372,036,854,775,807。
在ORDER BY子句中使用case語句。通過TechID輔助排序將利用您的要求照顧的TechID進行排序時,所有訂單值爲0
SELECT *
FROM A
ORDER BY
Case
When (Orders = 0) Then 9999
Else Orders
End,
TechID
這是一個容易:
select *
from A
order by case Orders -- 1. Orders values
when 0 then 2 -- of zero collate after
else 1 -- non-zero Orders values
end , --
Orders , -- 2. Then collate by Orders value proper
TechID -- 3. Then by TechID
不知道它是否會在其他數據庫,然後Oracle的
SELECT * FROM T ORDER BY最後訂單空
真棒工作。謝謝 :) –