SELECT 语句中包含“IF”,WHERE?

SELECT Statement with "IF" included in WHERE?

提问人:AlbumBlast 提问时间:8/30/2023 最后编辑:Dale KAlbumBlast 更新时间:8/30/2023 访问量:66

问:

Sample Data

我有一个查询,它正在提取工作流“A”中上述所有产品序列号的数据。但是,在某些情况下,工作流 A 和 B 中都有序列号。

发生这种情况时,我根本不想拉出那个序列号。但是,我不能只做一个简单的陈述,比如

WHERE Workflow <> 'B' 

因为它仍然拉取 .Workflow = 'A'

有没有人知道如何在语句中解决这个问题,或者是否需要进一步在上游处理?SELECT

sql sql 服务器 if-statement select where-子句

评论

1赞 Stuck at 1337 8/30/2023
请不要发布数据图片。该屏幕截图会更容易输入;文本更容易访问,并允许人们重现您的问题,并有更好的机会在第一次尝试时获得准确的答案。为什么我不应该上传代码/数据/错误的图片?
0赞 Cetin Basoz 8/30/2023
可能不仅仅是 B,而是 A 以外的任何东西,对吧?
0赞 Stuck at 1337 8/30/2023
此外,要求尚不清楚。如果存在工作流 C,是否可以将行包含为 A?
0赞 Panagiotis Kanavos 8/30/2023
IF即使您可以使用它,也无济于事。该表是否有主键或唯一列?您可以将表与自己的 LEFT JOIN 连接到不同的 ID(或任何键列),并确保仅返回左侧有 A 而右侧有 B 的行Product Serial Number
1赞 Dale K 8/30/2023
您还需要显示所需的结果。

答:

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');