我有一個表,其中包含如下的鍵列和其他列。基於列值的選擇性篩選行SQL
Keycolumn是COL1,COL2,COL3,COL4的組合。 對於給定的鍵列值,Col5有不同的值。 如果鍵列值在Col5上有多個值,則考慮除「O」以外的任何人。如果所有的staus都是'O',那麼考慮'O'。
在上述情況下,我應該從黃色,綠色,藍色和橙色
我有一個表,其中包含如下的鍵列和其他列。基於列值的選擇性篩選行SQL
Keycolumn是COL1,COL2,COL3,COL4的組合。 對於給定的鍵列值,Col5有不同的值。 如果鍵列值在Col5上有多個值,則考慮除「O」以外的任何人。如果所有的staus都是'O',那麼考慮'O'。
在上述情況下,我應該從黃色,綠色,藍色和橙色
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
;
得到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;
行號是一種排序。但事實並非如此。 –
(1)用你正在使用的數據庫標記你的問題。 –