SQL Server在分区内查找结果

SQL Server在分区内查找结果,sql,sql-server,count,ssms,sql-null,Sql,Sql Server,Count,Ssms,Sql Null,我有下表: ID Date ------------------- 1 Null 1 1/2/2020 2 Null 2 12/2/2020 3 Null 对于每个至少有一个非空日期的ID,我需要分类为“accounted” 结果集应如下所示: id Date AccountFlag ---------------------------- 1 Null Accounted 1 1/2/2020

我有下表:

ID    Date
-------------------    
 1    Null
 1    1/2/2020
 2    Null
 2    12/2/2020
 3    Null
对于每个至少有一个非空日期的ID,我需要分类为“accounted”

结果集应如下所示:

id    Date      AccountFlag
----------------------------
 1    Null      Accounted
 1    1/2/2020  Accounted
 2    Null      Accounted
 2    12/2/2020 Accounted
 3    Null      Unaccounted

可以使用窗口函数检查同一id是否至少有一个非空日期,并使用大小写表达式相应地设置标志。窗口聚合函数在这方面很方便:

select id, date,
    case when max(date) over(partition by id) is not null
        then 'Accounted'
        ese 'Unaccounted'
    end as accountflag
from mytable
max忽略null值,因此当且仅当分区中的所有值都为null时,它才会返回null。这对min也同样有效