提问人:AlbumBlast 提问时间:8/30/2023 最后编辑:Dale KAlbumBlast 更新时间:8/30/2023 访问量:66
SELECT 语句中包含“IF”,WHERE?
SELECT Statement with "IF" included in WHERE?
问:
我有一个查询,它正在提取工作流“A”中上述所有产品序列号的数据。但是,在某些情况下,工作流 A 和 B 中都有序列号。
发生这种情况时,我根本不想拉出那个序列号。但是,我不能只做一个简单的陈述,比如
WHERE Workflow <> 'B'
因为它仍然拉取 .Workflow = 'A'
有没有人知道如何在语句中解决这个问题,或者是否需要进一步在上游处理?SELECT
答:
2赞
Stuck at 1337
8/30/2023
#1
您可以使用它,尽管有(可能更复杂的)其他方法可能只需要单个表访问。NOT EXISTS
SELECT ... FROM dbo.TableName AS t
WHERE Workflow = 'A'
AND NOT EXISTS
(
SELECT 1 FROM dbo.TableName AS b
WHERE b.[Serial Number] = t.[Serial Number]
AND b.Workflow = 'B'
);
- 其他想法,取决于要求(例如,您是否希望序列号仅包含 A,或序列号包含 A 和除 B 以外的任何内容),以及可能没有的一些其他信息(例如有多少可能的工作流值)
评论
0赞
siggemannen
8/30/2023
也许 AND b.Workflow <> where 条件中的“A”应该涵盖大多数要求?
0赞
Stuck at 1337
8/30/2023
@siggemannen也许吧。要求尚不清楚。如果有一行 with 和另一行 with ,是否包括 7?我不知道。该问题明确指出不是 B,因此当前子句更有可能匹配,如果我更改它,好吧,它仍然只能适用于一个要求或另一个要求。如果 OP 澄清,那么我们就会知道。7,'A'
7,'C'
0赞
Cetin Basoz
8/30/2023
#2
select *
from myTable t1
where Workflow = 'A' and
not exists (select * from myTable t2
where t1.ProductSerialNumber = t2.ProductSerialNumber
and t2.Workflow <> 'A');
评论
IF
即使您可以使用它,也无济于事。该表是否有主键或唯一列?您可以将表与自己的 LEFT JOIN 连接到不同的 ID(或任何键列),并确保仅返回左侧有 A 而右侧有 B 的行Product Serial Number