如果可能,我需要以下示例查詢。
我似乎什麼都做不了(我試過如果存在,不存在,等等)。我現在只有一個基本的選擇語句,我只是卡住了,我的 SQL 很糟糕:
Select
UserID,
Date,
Type,
Step
from TableA
如果用戶 ID 在“步驟”列中具有具有“值 A”的行和具有“值 B”的行(值 A 的至少一行),則僅顯示具有“值 B”的行(排除所有包含“值 A") 按用戶 ID。
For example:
Original Table Source:
UserID | Date | Type | Step
-------+-----------+------+---------
24261 | 12/4/2021 | Doc | Value B
24261 | 12/4/2021 | Sig | Value A
24315 | 12/4/2021 | Sig | Value A
24331 | 12/4/2021 | Doc | Value B
24331 | 12/4/2021 | Sig | Value A
24328 | 12/4/2021 | Text | Value C
24341 | 12/4/2021 | Doc | Value B
24341 | 12/4/2021 | Sig | Value A
24341 | 12/4/2021 | Doc | Value B
24341 | 12/4/2021 | Sig | Value A
24357 | 12/4/2021 | Text | Value C
24357 | 12/4/2021 | Sig | Value A
24357 | 12/4/2021 | text | Value C
預期輸出:
UserID | Date | Type | Step
-------+-----------+------+---------
24261 | 12/4/2021 | Doc | Value B
24315 | 12/4/2021 | Sig | Value A
24331 | 12/4/2021 | Doc | Value B
24328 | 12/4/2021 | Text | Value C
24341 | 12/4/2021 | Doc | Value B
24341 | 12/4/2021 | Doc | Value B
24357 | 12/4/2021 | Text | Value C
24357 | 12/4/2021 | Sig | Value A
24357 | 12/4/2021 | Text | Value C
任何幫助,將不勝感激。
此選項可能有效 - 它將值 B 連接到所有擁有它的用戶 ID/日期,然後在 A.Step 和 B.Step 列中保留所有沒有值 A 和值 B 的記錄。
Select
A.UserID,
A.Date,
A.Type,
A.Step
from t as A
LEFT JOIN (
SELECT DISTINCT
UserID,
Date,
Type,
Step
FROM t
WHERE Step = 'Value B') as B
ON B.UserID = A.UserID AND B.Date = A.Date
WHERE NOT (A.Step = 'Value A' AND B.Step IS NOT NULL)
包括我對 Stu 小提琴的查詢 -
https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=11115c225929e9bd0a46ff3071c00948
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句