2016-06-01 6 views
-1

以下のコードでコメント行の行を返す必要があります。以下のシナリオを達成するためには論理的な助けが必要です

これは、4番目の列を使用してすばやく行うことができましたが、4番目の列がないと想像してください。列を返す方法

は「問題として返すべき」としてマークされ

';with temp as (
select 'A' col1,'B' col2,'C' col3, 'Problem' col4--Should return as a problem 
union ALL 
select null, null, null,'Problem' --Should return as a problem 
union ALL 
select null, 'B', 'C','Problem' --Should return as a problem 
union ALL 
select 'A','B',null,'Problem' --Should return as a problem 
union ALL 
select 'A',null,'C','Problem' --Should return as a problem 
union ALL 
select 'A',null,null,'Not a Problem' --Should NOT return as a problem 
union ALL 
select null, 'B', null,'Not a Problem' --Should NOT return as a problem 
union ALL 
select null,null,'C','Not a Problem' --Should NOT return as a problem 
) 
select * from temp WHERE COALESCE(col1, col2, col3) IS NOT NULL 
        or COALESCE(col1, col2, col3) IS NULL' 
+0

混乱:ここでは一つの方法です。これはすべてを返します。あなたは何をしようとしているのですか? –

+0

コード内の最初と最後の引用符を削除できますか?私はそれを読むことが難しくなる – Petaflop

+0

問題のない問題のカテゴリを明確にすることができますか、そのようなマークを付ける理由 – TheGameiswar

答えて

2

あなたは、少なくとも2つのNULL値を持つ行を返すようにしたいように見えます。あなたはWHERE句でOR条件を持っている理由

where ((case when col1 is null then 1 else 0 end) + 
     (case when col2 is null then 1 else 0 end) + 
     (case when col3 is null then 1 else 0 end) 
    ) = 2 
+0

迅速なソリューションをありがとう – SQLMike

0
select *from temp where 
(col1 is not null and (col2 is null and col3 is null)) or 
(col2 is not null and (col1 is null and col3 is null)) or 
(col3 is not null and (col1 is null and col2 is null)) 
関連する問題