2015-02-07 50 views
0

我需要將具有多個值的列按特定順序進行比較。按特定順序比較具有多個值的列

例如:如果值是AA,BB,CC,DD。

比我的查詢應該是這樣的,它比較AA列第一和比BB,CC和DD。

這裏是我的查詢假設CASE WHEN ELSE執行時條件指定的順序:

SELECT RegionID FROM WotifRegions WHERE SiteID = @SiteID AND 
    1 = CASE 
      WHEN LocationName = @DepotCity THEN 1 
      WHEN LocationName = @DepotName THEN 1 
      WHEN LocationName = @LocationCity THEN 1 
      WHEN LocationName = @LocationName THEN 1 
      ELSE 0 
     END 

請讓我知道,如果我錯了,有一個更好的辦法。僅供參考:它是一張小桌子。

回答

2

你也可以只做到:

SELECT RegionID FROM WotifRegions WHERE SiteID = @SiteID AND 
    (LocationName = @DepotCity or 
     LocationName = @DepotName or 
     LocationName = @LocationCity or 
     LocationName = @LocationName) 

,或者如果它只是一個場與幾個值:

SELECT RegionID FROM WotifRegions WHERE SiteID = @SiteID AND 
LocationName in (@DepotCity, @DepotName, @LocationCity, @LocationName) 

如果你實際上也意味着對數據的順序是這樣排序,然後這個:

SELECT RegionID FROM WotifRegions 
WHERE SiteID = @SiteID AND 
LocationName in (@DepotCity, @DepotName, @LocationCity, @LocationName) 
order by CASE 
     WHEN LocationName = @DepotCity THEN 1 
     WHEN LocationName = @DepotName THEN 2 
     WHEN LocationName = @LocationCity THEN 3 
     WHEN LocationName = @LocationName THEN 4 
     ELSE 5 end 

如果你只需要第一個,然後添加「頂部1」。

+0

不,Sql Server不能保證按照我已經讀過的規定執行條件。您能否通過提及它的鏈接支持您的答案? – iMatoria 2015-02-07 19:24:31

+0

按特定順序比較不會對結果產生任何影響。如果您需要訂購數據或根據您的優先級查找第一行,則必須按順序指定順序。 – 2015-02-07 19:30:20

+0

是的,你是對的。讓我試試你更新的答案。 – iMatoria 2015-02-07 19:55:00