当其中一行具有特定值时,Sql结果返回值

时间:2017-02-01 14:37:53

标签: sql-server

我有一个返回一些看起来与此类似的数据的查询:

Select DISTINCT ID_NUM, CRS_ID, ACTION FROM MY_TABLE

返回的数据如下所示:

ID Num | CRS_ID | ACTION

1111111 | ABC_DEF | ç

1111111 | ABC_DEF | d

1111111 | GHI_JKL | ç

2222222 | ABC_DEF | ç

2222222 | GHI_JKL | ç

我需要操作数据,以便在ID_NUM和CRS_ID组合有多个行的情况下,如果有多个操作值,它将只返回带有“C”的一行。如果只有一个值,它应该保持不变。

1 个答案:

答案 0 :(得分:2)

以下是使用ROW_NUMBER执行此操作的一种方法。

select ID_NUM
    , CRS_ID
    , ACTION 
from
(
    Select ID_NUM
        , CRS_ID
        , ACTION 
        , ROW_NUMBER() over(partition by  ID_NUM, CRS_ID order by case when Action = 'C' then 1 else 2 end) as RowNum
    FROM MY_TABLE
) x
where x.RowNum = 1