You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL多行记录合并为单行:用户多类型邮箱合并实现问询

解决NPI多行邮箱合并为一行的问题

这是典型的行转列需求,有两种简单高效的方法可以实现你的期望输出,我给你一步步说明:

方法一:聚合函数 + CASE表达式

你原来的CASE表达式已经能区分两种邮箱类型,只需要加上GROUP BY NPI和聚合函数(比如MAX)来合并同一NPI的行即可:

declare @t table(NPI int, email varchar(50), emailtype varchar(50))
insert into @t values(1, 'john@home', 'personal'), (1, 'john@work', 'work');

SELECT 
    NPI,
    MAX(CASE WHEN emailtype = 'personal' THEN email END) AS personalemail,
    MAX(CASE WHEN emailtype = 'work' THEN email END) AS workemail
FROM @t
GROUP BY NPI;

原理说明:

  • GROUP BY NPI将同一NPI的所有记录归为一组
  • MAX()函数会自动忽略NULL值,所以每组里的personal邮箱和work邮箱会被分别提取并合并到同一行

方法二:使用PIVOT运算符

SQL Server的PIVOT专门用于这种行转列的场景,代码更简洁:

declare @t table(NPI int, email varchar(50), emailtype varchar(50))
insert into @t values(1, 'john@home', 'personal'), (1, 'john@work', 'work');

SELECT 
    NPI,
    personal AS personalemail,
    work AS workemail
FROM @t
PIVOT (
    MAX(email)  -- 指定聚合的列
    FOR emailtype IN ([personal], [work])  -- 指定要转成列的类型值
) AS PivotTable;

原理说明:

  • PIVOT会把emailtype列的不同值(personal和work)直接转成表的列
  • MAX(email)用于在分组后获取对应的邮箱值(因为同一NPI同一类型的邮箱应该只有一个,用MAX/ MIN都可以)

两种方法执行后都会得到你想要的输出:

npi personalemail workemail
1   john@home     john@work

内容的提问来源于stack exchange,提问作者jackstraw22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:16:15