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

2 つの別個の句を 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 に答える
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 に答える