0

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

(status_code 不在 'A' 中)或(status_code 不在 'C' 中并且 SNbr 不在 '01'、'02'、'03 中)

两列都可以有重复的值,并且可以包含 NULL 值。

这是表格数据

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

在此先感谢您的帮助

4

3 回答 3

1
select * from <tablename> where 
status_code != 'A' or status_code is null or SNbr is null or
(status_code !='C' and SNbr not in ('01','02','03'))
于 2012-04-29T02:52:55.203 回答
0

[更新]试试这个:

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')
于 2012-04-29T02:52:46.380 回答
0

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

SELECT * FROM someTable
WHERE COALESCE( status_code, '' ) != 'A' 
AND
( COALESCE ( status_code, '' ) != 'C' 
  OR COALESCE( SNbr, '' ) NOT IN ( '01', '02', '03' )
)
;
于 2012-04-29T04:30:58.717 回答