首页 > 解决方案 > 在分组依据之前将行值存储为新列

问题描述

任何人都知道我可以如何分组,但保留一个不同的列?我搞砸了 UNPIVOT,但找不到一个很好的解释来帮助我编写代码。有人有解决方案吗?

我的数据如下所示:

acct contact email phone
1     44      abc  NULL
1     33      NULL 123
2     2       xxx  NULL
2     22      NULL 456

我用

select acct,max(email) as email, max(phone) as phone from my_table 
group by acct

结束这个:

acct email phone
1    abc 123
2    xxx  456

但我的最终目标是分组并为电话和电子邮件创建一个单独的联系人列,如下所示:

acct contact_email email phone contact_phone
1     44           abc  123    33
2     2            xxx  456    22

标签: sqlsql-server

解决方案


您似乎想要简单的聚合:

select acct, 
       max(case when phone is null then contact end) as contact_email,
       max(email) as email, max(phone) as phone, 
       max(case when email is null then contact end) as contact_phone
from table t
group by acct;

推荐阅读