棘手的 WHERE 条件子句

Tricky WHERE condition clause

我陷入了一个看起来很容易的困境,但我就是不能把它放在 TSQL 中。

假设我有这个 Table

Service     Master
LOCAL       BRGIL
EREPO       CROMST
NICLI       CROMST
EXPORT      NIGIL

我需要忽略所有在 Master 中具有值 'CROMST' 的记录,除非 'Service' 中的值是 EREPO

到目前为止我已经试过了

WHERE (Master <> 'CROMST' AND ([Service] <> 'EREPO'))

这只显示

Service     Master
LOCAL       BRGIL
EXPORT      NIGIL

我也试过这个

WHERE (Master <> 'CROMST' AND (rtrim([Service])+rtrim(Master) <> 'EREPOCROMST'))

仍然没有运气。

我知道这应该很容易,但我被屏蔽了

我正在寻找的结果是

Service     Master
LOCAL       BRGIL
EREPO       CROMST
EXPORT      NIGIL

尝试:

WHERE Master <> 'CROMST'
  OR (([Service] = 'EREPO') AND (Master = 'CROMST'))
SELECT * FROM 
your_table
WHERE (Key2 != 'CROMST' OR Key1 = 'EREPO' )

将是我的方法

使用:

where master <> 'CROMST' or Service = 'EREPO'

评估可能的情景:

  • 场景:master='CROMST';服务 = 'EREPO'
    • falsetrue
  • 场景:master != 'CROMST';服务 = 'EREPO'
  • 场景:master='CROMST';服务!= 'EREPO'
    • falsefalse
  • 场景:master != 'CROMST';服务!= 'EREPO'
    • truefalse

用例函数:

DECLARE @myTable AS TABLE
    (
        [SERVICE] VARCHAR(8) ,
        [Master] VARCHAR(8)
    );


INSERT INTO @myTable (   [SERVICE] ,
                         [Master]
                     )
VALUES ( 'LOCAL', 'BRGIL' ) ,
    ( 'EREPO', 'CROMST' ) ,
    ( 'NICLI', 'CROMST' ) ,
    ( 'EXPORT', 'NIGIL' );

    SELECT * FROM @myTable;

    SELECT *
    FROM @myTable
    WHERE 1 =   CASE WHEN ([MASTER] = 'CROMST') 
                    THEN
                        CASE WHEN ([SERVICE] = 'EREPO') 
                            THEN 1 -- special exception
                            ELSE 0 --disregard all others
                        END
                    ELSE 1 -- keep
                END 

select * 来自 your_table 个 其中不存在 (select * 来自 your_table b 其中 b.Master = 'CROMST' 和 b.Service <> 'EREPO')

子查询查询Master值为'CROMST'但'Service'值不是'EREPO'的所有行。

"not exists"过滤掉子查询结果