我有一个带有键列和其他列的表格如下所示。
Keycolumn是col1,col2,col3,col4的组合。 对于给定的键列值,我有不同的Col5值。 如果键列值在Col5上有多个值,那么请考虑除“&O”以外的任何人。如果所有的状态都是' O'然后考虑' O'
在上面的例子中我应该得到4行。每一行来自黄色,绿色,蓝色和橙色
答案 0 :(得分:1)
在大多数数据库中,您将使用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 :(得分: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
;