我有一张桌子可以提取用户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');
这是我到目前为止所写的查询,它将它放在两个不同的行上:
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
我该怎么做?
答案 0 :(得分:3)
使用pivot
SELECT
*
FROM @T
PIVOT
(
MAX(email)
FOR EmailType IN
(
personal,work
)
)Q
答案 1 :(得分:3)
这已被问及在这里回答了大约一百万次。它被称为条件聚合或交叉表。写答案比找一个答案要快。作为替代方案,你可以使用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