在SQL中,需要从包含空值的2列中提取值

在SQL中,需要从包含空值的2列中提取值,sql,Sql,我正在从表中提取记录,条件是 (状态代码不在“A”中)或(状态代码不在“C”中,SNbr不在“01”、“02”、“03”中) 这两列可以有重复的值,也可以包含空值 这是表格数据 status_code SNbr A 01 A NULL A 04 NULL NULL NULL

我正在从表中提取记录,条件是

(状态代码不在“A”中)或(状态代码不在“C”中,SNbr不在“01”、“02”、“03”中)

这两列可以有重复的值,也可以包含空值

这是表格数据

status_code              SNbr
A                        01
A                        NULL
A                        04 
NULL                     NULL
NULL                     01
C                        NULL
C                        01
C                        04
B                        01
B                        NULL
所需的O/p为

status_code              SNbr
NULL                     NULL
NULL                     01
C                        NULL
C                        04
B                        01
B                        NULL
提前感谢您的帮助

[更新]尝试以下方法:

DECLARE @table TABLE (status_code varchar(4), snbr varchar(5))
INSERT INTO @table
SELECT 'A','01'
UNION SELECT 'A',NULL
UNION SELECT 'A','04' 
UNION SELECT NULL,NULL
UNION SELECT NULL,'01'
UNION SELECT 'C',NULL
UNION SELECT 'C','01'
UNION SELECT 'C','04'
UNION SELECT 'B','01'
UNION SELECT 'B',NULL


select * from @table where 
(ISNULL(status_code,'') IN ('C') AND ISNULL(SNbr,'') NOT IN ('01','02','03')) OR
(ISNULL(status_code,'') NOT IN ('C') AND ISNULL(status_code,'') != 'A')
从何处选择*
状态代码!=''或状态\代码为空或SNbr为空或
(状态代码!=“C”和SNbr不在('01'、'02'、'03'))

问题中条件的措辞具有误导性,因为两个单独的子句不能通过OR连接,并且仍然产生所需的输出。问题中显示的示例输出表明,所有规则都需要强制执行,而不仅仅是其中一个。下面是SQL中WHERE子句的用法:

SELECT * FROM someTable
WHERE COALESCE( status_code, '' ) != 'A' 
AND
( COALESCE ( status_code, '' ) != 'C' 
  OR COALESCE( SNbr, '' ) NOT IN ( '01', '02', '03' )
)
;

他也需要不带null的数据。
SELECT * FROM someTable
WHERE COALESCE( status_code, '' ) != 'A' 
AND
( COALESCE ( status_code, '' ) != 'C' 
  OR COALESCE( SNbr, '' ) NOT IN ( '01', '02', '03' )
)
;