sql基于列选择行是否为空
样本数据sql基于列选择行是否为空,sql,sql-server,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
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
其中设置ID需要是唯一的,具有
行号
窗口功能:
;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排序
)。与设置ID=101相同。。。因此,对于该分区中最大的ID
,每个分区(设置ID的值)将获得行数=1
。其余的只是通过rn=1
进行筛选,不知道为什么有人对此投了反对票。这是最好的方法。我确实认为一些解释会很好。我希望使用不同的setingId=5的行,这些行可能不在order@theHaggis,那么,您首先尝试了什么?我假设您更喜欢DifferentSettingID不为NULL的行,如果不可用,请选择DifferentSettingID=NULL的行,而不是按ID描述排序?