基于列的sql select行是否为null

时间:2015-06-24 14:16:42

标签: sql sql-server

示例数据

ID    SettingID   DifferentSettingID  Value
1     100         Null                True
2     100         5                   False
3     101         Null                0
4     101         5                   1
5     102         NULL                100

通缉结果

ID    SettingID   DifferentSettingID  Value
2     100         5                   False
4     101         5                   1
5     102         NULL                100

SettingID必须是唯一的

1 个答案:

答案 0 :(得分:3)

使用row_number窗口函数:

;with cte as(select *, row_number() 
                         over(partition by SettingID order by ID desc) rn from TableName)
select * from cte 
where rn = 1

此窗口函数将按分区SettingID值对分区中的行进行编号。例如,对于SettingID = 100,它会将1提供给ID 2,将数字2提供给ID 1(因为desc ordering)。对于SettingID = 101也是如此...因此,每个分区(SettingID的值)将获得该分区中最大row_number=1的{​​{1}}。其余的只是按ID过滤。