Sql server 如何在SQL Server中将行分组在一起?

Sql server 如何在SQL Server中将行分组在一起?,sql-server,group-by,Sql Server,Group By,我需要将同一ID分组到一行中,并保留包含最多数据的行 如果ID组没有数据,我仍然希望返回1行。我有大约30个数据列 例如: 身份证件 城市 国家 数据A 数据B 数据30 1. 城市1 国家1 数据A1 数据1 数据1 1. 城市2 国家2 无效的 无效的 无效的 1. 城市3 国家3 无效的 无效的 无效的 2. 城市1 国家1 数据A1 数据1 数据1 2. 城市2 国家2 无效的 无效的 无效的 2. 城市3 国家3 无效的 无效的 无效的 3. 城市1 国家1 无效的 无效的 无效的 3

我需要将同一ID分组到一行中,并保留包含最多数据的行

如果ID组没有数据,我仍然希望返回1行。我有大约30个数据列

例如:

身份证件 城市 国家 数据A 数据B 数据30 1. 城市1 国家1 数据A1 数据1 数据1 1. 城市2 国家2 无效的 无效的 无效的 1. 城市3 国家3 无效的 无效的 无效的 2. 城市1 国家1 数据A1 数据1 数据1 2. 城市2 国家2 无效的 无效的 无效的 2. 城市3 国家3 无效的 无效的 无效的 3. 城市1 国家1 无效的 无效的 无效的 3. 城市2 国家2 无效的 无效的 无效的 3. 城市3 国家3 无效的 无效的 无效的
如果对非空列的数量求和,然后应用一个
行\u编号

with cte as (
    select *, Row_Number() over(partition by id order by tot desc) rn
        from (
        select * , Iif(data1 is null,0,1) + Iif(data2 is null,0,1) + Iif(data30 is null,0,1) tot
        from t
    )x
)
select id, city, country, data1, data2, data30
from cte
where rn=1

请参见

没有列出30列,有没有更简单的方法来编写此部分?“Iif(data1为null,0,1)+Iif(data2为null,0,1)+Iif(data30为null,0,1)”我将计算非null的所有列