Sql server 如何为给定场景合并表中的行?
假设我有一张桌子Sql server 如何为给定场景合并表中的行?,sql-server,Sql Server,假设我有一张桌子 CustId Name Age Gender Business Code 1 John 24 Male Automobiles 1 2 Peter 30 Male Space 3 2 Peter 30 Male IT null 3 Kris 48 Female Infra null 我需要输出如下 CustId Name
CustId Name Age Gender Business Code
1 John 24 Male Automobiles 1
2 Peter 30 Male Space 3
2 Peter 30 Male IT null
3 Kris 48 Female Infra null
我需要输出如下
CustId Name Age Gender Business Code
1 John 24 Male Automobiles 1
2 Peter 30 Male Space 3
3 Kris 48 Female CodeNotAvailable null
彼得有两个公司,一个有代码,另一个没有代码。因此,将删除不带代码的行
Kris的业务没有代码,因此需要在业务列中显示CodeNotAvailable。我们可以使用ROW_NUMBER获取行号并选择行。默认情况下,SQL Server首先命令NULL。我们需要使用order by code desc将非空值作为行中的第一行
选择客户ID、姓名、年龄、性别、业务、代码
从…起
选择*行,按客户订单按代码描述超额分配为rnk
从表中选择t
其中rnk=1
;with r as (
select Custid, Name, Age, Gender,
case when code is null then 'CodeNotAvailable' else Business end as Business,
Code
from myTab
)
select max(CustId) CustId, Name, Age, Gender, Business, Code
from r
group by Name, Age, Gender, Business, Code