2012-09-17 127 views
0

我正在一個項目上工作,我有一個奇怪的要求。奇怪的SQL查詢

我有一個表A與字段。

Orders的值可以是0, 1, 2, 3, .......我的任務是顯示按Orders排序的表的內容字段。其中Orders字段的值爲1的行首先顯示,其餘順序依次顯示。必須在末尾顯示值爲0的行。如果所有Orders字段的值都是0,我需要通過TechID字段排序表。

有關實現此目的的任何想法?這可以通過SQL查詢來實現,還是應該爲此編寫一個T-Sql腳本?

回答

3

沒有實際測試,但是,這個總體思路應該工作:

SELECT * FROM A 
ORDER BY 
    CASE Orders WHEN 0 THEN 2147483647 ELSE Orders END, 
    TechID 

注意:這假定Ordersint。如果其bigint代替使用9,223,372,036,854,775,807。

+0

真棒工作。謝謝 :) –

1

在ORDER BY子句中使用case語句。通過TechID輔助排序將利用您的要求照顧的TechID進行排序時,所有訂單值爲0

SELECT * 
FROM A 
ORDER BY 
    Case 
     When (Orders = 0) Then 9999 
     Else Orders 
    End, 
    TechID 
9

這是一個容易:

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 
0

不知道它是否會在其他數據庫,然後Oracle的

SELECT * FROM T ORDER BY最後訂單空