sql - 在分组依据之前将行值存储为新列
问题描述
任何人都知道我可以如何分组,但保留一个不同的列?我搞砸了 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
解决方案
您似乎想要简单的聚合:
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;
推荐阅读
- r - 如何从 data.frame 创建一个表格,其中一个单元格可以使用 R 有多个值
- elixir - 模板:为什么我们使用 <%= 标签进行 for 循环/理解?
- python - celery 任务计划但未在 ETA 执行
- sql-server - SQL Server - 如何获取 STDistance() 或 STLength() 的米?
- node.js - 创建 Vue CLI 3 应用程序时的节点版本问题
- sql - VBA - 带有过滤器的 SQL 请求
- kdb - KDB:如何在 Java 中进行批量插入?
- postgresql - 从一个表中插入一行具有 NULL 值的行
- .net - 从 Delphi/C++Builder 调用 .NET 程序集
- postgresql - 在 Postgres JSONB 中附加键值对的简单方法