2016-04-28 56 views
0

我想根據同一唯一ID內的多個條件選擇SQL表中的行。SQL Server:根據同一唯一ID內的多個條件選擇行

我有以下表:

  ID            狀態
                AS
               建議
                AS

的規則如下:

  • 如果[ID]同時具有 '建議' 和 'AS' ,只選擇'Rec'的行。換句話說,'Rec'優先於'AS'。

  • 如果[ID]沒有'Rec',請選擇'AS'行。

我想查詢只輸出行ID=1,Status=ASID=2,Status=Rec

什麼是查詢選擇只有這兩行?

回答

1

您可以創建一個輔助列或字段來充當您的值的訂單嗎?

Rec = 3 
AS = 2 
.... 

然後,看到的說明和這裏相關文章:https://stackoverflow.com/a/2129703/5819421

的文章談到這聽起來像這將如何爲你工作「從每個組中選擇一個最大行」。

+0

我無法創建額外的列。如果我可以簡單地添加一個WHERE [newCol] ='whatever''條件,但我無法控制這一點,那將很容易。 – BansheeAce

0

的僞代碼:

SELECT DISTINCT Id, Status 
FROM MyTable 
WHERE Status = 'Rec' 
OR (
Status = 'AS' 
AND NOT EXISTS(
    SELECT * FROM MyTable WHERE Status='Rec', correlated to outer query on Id 
) 
) 

在英語中,得到一組不同的行,其中狀態爲「REC」或者狀態爲「AS」,有沒有「REC」爲相同的ID。

1
; WITH CTE AS (
    SELECT ROW_NUMBER() OVER (PARTITION BY id ORDER BY status DESC) rn, ID, Status 
    FROM (
     SELECT DISTINCT id, status 
     FROM MyTable 
    )--in case you have several Rec's and AS's 
) 
SELECT id, status 
FROM CTE 
WHERE rn = 1 
+0

當然,如果還有其他您不想考慮的狀態值,可能需要進一步過濾CTE中的派生表。 – HLGEM