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

问题描述 投票:0回答:2

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

发生这种情况时,我根本不想提取该序列号。但是,我不能只做一个简单的声明,比如

WHERE Workflow <> 'B' 

因为它仍然提取

Workflow = 'A'
所在的数据行。

有谁知道如何在

SELECT
声明中解决这个问题,还是需要在上游进一步处理?

sql sql-server if-statement select where-clause
2个回答
2
投票

您可以使用

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
投票
select *
from myTable t1
where Workflow = 'A' and
      not exists (select * from myTable t2
                  where t1.ProductSerialNumber = t2.ProductSerialNumber
                        and t2.Workflow <> 'A');
© www.soinside.com 2019 - 2024. All rights reserved.