Sql server SQL将多条记录合并到一行中

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'); 这是我到目前为止编写的查询,将其放在两个单独的行上:

我有一个表格,可以提取用户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
我如何才能做到这一点?

使用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

这个问题投了一票反对票,原因可能是,这类问题一般都会被问到。。。但是问问题的好方法