SQL Server - 僅當同一列和表中該用戶 ID 存在值 B 時,才排除具有值 A 的所有行

僧侶窩

如果可能,我需要以下示例查詢。

我似乎什麼都做不了(我試過如果存在,不存在,等等)。我現在只有一個基本的選擇語句,我只是卡住了,我的 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SQL列出列A出现多次但列B值不同的所有行

SQL选择一列中具有重复值的所有行

如何在SQL Server的表的所有列中选择具有空值的行?

查找所有具有行A值和行B的ID

如果另一列在SQL Server中相同,则获取具有最小列值的行

SQL:对于相同的A值,如果存在两个或多个B值,并且B值之一为空;显示A,B和C的所有组合

SQL:仅当在同一行中另一列具有不同的值时,才返回一列的值

需要找出SQL Server表中的所有列是否具有相同的值

将具有逗号分隔的varchar值的表与SQL Server中另一个表的ID值联接

SQL Server:从动态值列表中选择列不包含任何值的所有行

SQL Server 2012如何确定表A中的所有值是否都在表B中

SQL Server选择所有列中具有1值的行

SQL查询:获取不存在具有相同值和列值B的列A的行

SQL将B列中与A列中的所有值具有相同值的B列中的所有值连接在一起

SQL-选择特定ID的位置,存在其他列的所有不同值

SQL Server-如何检查表中的所有列并在行具有特定组合值的情况下排除行

查找其中一列属于同一值并且另一列满足SQL Server 2008中的条件的所有行

如果某一列包含特定值,则选择具有相同ID的所有行

选择不重复的行,其中列中的所有值均是同一SQL Server

SQL-获取行,其中列A的所有值X =值B

SQL Server:如果有另一行具有相同的col值和特定的辅助列值,则排除表中的行

SQL Server 2012添加具有匹配ID的行的值

SQL Server:用户定义的函数,返回与一个员工 ID 对应的所有值的总和

基于列的 SQL SELECT 从 TABLE B 但根据 TABLE A ID 获取所有行

SQL Server:选择同一列中具有相同值的2行的最大日期/时间

SQL Server:将行插入表中,对于所有 id 尚不存在

在 SQL 中获取列 A 中具有相同值的所有行,这些行在列 B 中只有非空值

SQL Server:从同一列中具有匹配值的第一行之后的列中选择所有行

從 SQL Server 的結果集中分配具有相同 ID 的所有記錄,列中的現有值