2016-11-07 10 views
1

私はcol3 = 1と一致するすべてを取得し、グループcol4 = 123の残りの部分を取得しながらcol2を別個の値にするクエリを作成しようとしています。私のテーブルには、結果に特定の行を結合する

ID col1 col2 col3 col4 
--------------------------------- 
1 A1  A  NULL 123 
2 B1  B  NULL 123 
3 C1  C  NULL 123 
4 D1  D  NULL 123 
5 C2  C  1  123 
6 D2  D  1  123 

のように見えると私は持っているが、3,4,5の労働組合を試してみましたが、select * from tbl where col4 = 123 and col3 =1のバリエーションをオフに参加し、彼らはすべてのいずれかの除外のID 1,2,5および6を返すクエリを作成しようとしています、6、またはそれらのすべてを含めることができます。

+0

は、私が質問を理解していないが。行を選択するために使用する基準は何ですか? – Blorgbeard

+0

私は基本的にcol4 = 123を照会し、col3の値とcol2と一致しない他のすべての値を持つすべてを取得します。 – user2920788

答えて

2
select  * 


from  (select  * 

         ,row_number() over 
         (
          partition by col2 
          order by  case when col3 = 1 then 1 else 2 end 
         ) as rn 

      from  t 

      where  col4 = 123 
      ) t 

where  col3 = 1 
     or t.rn = 1 
; 
0

私が正しく理解していれば、あなたはcol3NULLではありませんし、残りの行で、これらの異なるcol2値持っているものすべての行たい:

select t.* 
from t 
where t.col4 = 123 and 
     (t.col3 is not null or 
     t.col2 not in (select t.col2 from t t2 where t2.col4 = 123 and t2.col3 is not null) 
    ) 
+0

"col4 = 123"の要件 –

+0

@ AlvinThompsonを忘れないでください。 。 。ありがとうございました。 –

+0

"123"の要件は、第2部分(t.col3がヌルの場合)にのみ適用する必要があると思います。 –

関連する問題