我有一张表,可以提取用户 ID 及其个人和工作电子邮件。我希望每个 id 有一行显示两种类型的电子邮件,但我不知道如何做到这一点。
declare @t table(NPI int, email varchar(50), emailtype varchar(50))
insert into @t
values(1, 'john@home', 'personal'), (1, 'john@work', 'work');
这是我到目前为止编写的查询,它把它放在 2 个单独的行上:
select npi, case when emailtype = 'personal' then email end as personalemail,
case when emailtype = 'work' then email end as workemail
from @t;
当前输出:
npi personalemail workemail
1 john@home NULL
1 NULL john@work
我想看到的是:
npi personalemail workemail
1 john@home john@work
我怎样才能做到这一点?
最佳答案
这已经在这里被询问和回答了大约一百万次。它称为条件聚合或交叉表。写答案比找到答案要快。作为替代方案,您可以使用 PIVOT,但我发现语法对我来说有点迟钝。
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
关于sql-server - SQL 将多条记录合并为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48426598/