2017-05-03 6 views
1

私は、以下のように、キー列と他の列を持つテーブルを持っています。セレクティブ列の値に基づく行の行SQL

enter image description here

KeyColumnはCOL1、COL2、COL3、COL4の組み合わせです。 与えられたキー列の値に対して、私はCol5の値が異なります。 キー列の値がCol5に複数の値を持つ場合は、 'O'以外を考慮してください。すべてのスタオが「O」であれば、「O」を考慮する。上記の場合

私はほとんどのデータベースではイエロー、グリーン、ブルーとオレンジ

+1

(1)使用しているデータベースで質問にタグを付けてください。 –

答えて

1

ゴードンのクエリは、有効なアイデアを持っていますが、それは可能であれば非'O」行を選んについてのあなたの規則に従っていません。

WITH 
CTE 
AS 
(
    SELECT 
     KeyColumn 
     ,Col1 
     ,Col2 
     ,Col3 
     ,Col4 
     ,Col5 
     ,Col6 
     ,ROW_NUMBER() OVER (PARTITION BY KeyColumn 
      ORDER BY 
       CASE WHEN Col5 = 'O' THEN 1 ELSE 0 END -- put 'O' last 
       ,Col5) as rn -- pick first non-O row 
          -- you can choose other column(s) instead of Col5 here 
    FROM YourTable 
) 
SELECT 
    KeyColumn 
    ,Col1 
    ,Col2 
    ,Col3 
    ,Col4 
    ,Col5 
    ,Col6 
FROM CTE 
WHERE rn = 1 
; 
1

から4 rows.Eachつを取得する必要があり、あなたは、ANSI標準row_number()機能を使用します。このような何か:

select t.* 
from (select t.*, 
      row_number() over (partition by keycolumn order by keycolumn) as seqnum 
     from t 
    ) t 
where seqnum = 1; 
+0

行番号は一種の並べ替えのためのものです。しかし、ここではそうではありません。 –

関連する問題