我有下表,有超過 7 萬條記錄:
測驗_1:
ClientID Category
22 Stress
22 Alcohol
22 Scizo
23 Stress
23 Alcohol
24 Stress
24 Scizo
25 Bi Polar
25 Cocaine
25 Meth
26 Stress
我只需要在 ClientID 中選擇那些 ClientID,其中 Category = 'Stress',Category = 'Alcohol'。
所以,我希望 ClientIDs - 22, 23 在我的輸出中。
(ClientID 24 只有“Stress”,沒有“Alcohol”;ClientID 26 也一樣,ClientID 25 沒有“Stress”,沒有“Alcohol”。不應選擇 24、25、26 的意思)
在這個簡單的代碼中,我的結果包括 ClientID = 22、23、24、26。最后 2 個 ID 中出現“壓力”而沒有“酒精”的位置。
SELECT
[ClientID]
,[Category]
FROM
[WH].[dbo].[Test_1]
WHERE
(0=0)
and (Category = 'Stress' or Category = 'Alcohol')
如果我用 AND 寫我的 WHERE 陳述句
WHERE
(0=0)
and (Category = 'Stress' AND Category = 'Alcohol')
然后我沒有顯示記錄
請幫忙!
UPD - 已回答問題(見下文)
此外,如果我想在查詢中查看實際類別(不僅僅是 ID),那么我執行以下操作:
SELECT
m.[ClientID]
,m.[Category]
FROM
[WH].[dbo].[Test_1] m
INNER JOIN
(
SELECT
[ClientID]
FROM
[WH].[dbo].[Test_1]
WHERE
[Category] IN ('Stress', 'Alcohol')
GROUP BY
[ClientID]
HAVING COUNT(DISTINCT Category) = 2
) cte ON m.ClientID = cte.ClientID
我得到以下結果:
ClientID Category
22 Stress
22 Alcohol
22 Scizo
23 Stress
23 Alcohol
uj5u.com熱心網友回復:
您當前方法的問題是該WHERE子句是應用于單個記錄的邏輯。相反,您希望跨多個記錄執行類別檢查。一種方法使用聚合:
SELECT ClientID
FROM [WH].[dbo].[Test_1]
WHERE Category IN ('Stress', 'Alcohol')
GROUP BY ClientID
HAVING COUNT(DISTINCT Category) = 2;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/514567.html
