2017-05-03 91 views
1

我有一個表,其中包含如下的鍵列和其他列。基於列值的選擇性篩選行SQL

enter image description here

Keycolumn是COL1,COL2,COL3,COL4的組合。 對於給定的鍵列值,Col5有不同的值。 如果鍵列值在Col5上有多個值,則考慮除「O」以外的任何人。如果所有的staus都是'O',那麼考慮'O'。

在上述情況下,我應該從黃色,綠色,藍色和橙色

+1

(1)用你正在使用的數據庫標記你的問題。 –

回答

1

Gordon的查詢有效,但如果可能的話,它不遵循有關選擇非'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

行號是一種排序。但事實並非如此。 –