Sql server SQL将多条记录合并到一行中
我有一个表格,可以提取用户ID及其个人和工作电子邮件。我希望每个id有一行显示这两种类型的电子邮件,但我不知道如何做到这一点Sql server SQL将多条记录合并到一行中,sql-server,Sql Server,我有一个表格,可以提取用户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'); 这是我到目前为止编写的查询,将其放在两个单独的行上:
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
我如何才能做到这一点?使用pivot
SELECT
*
FROM @T
PIVOT
(
MAX(email)
FOR EmailType IN
(
personal,work
)
)Q
这个问题在这里已经被问了一百万次了。它被称为条件聚合或交叉表。写答案比找答案快。作为替代,您可以使用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
这个问题投了一票反对票,原因可能是,这类问题一般都会被问到。。。但是问问题的好方法