sql - 将 SQL 行数据转置为列
问题描述
在 SQL 中,我们需要按以下方式转换表:
表格1:
+-----+---------+-----------+
| ID | insured | DOD |
+-----+---------+-----------+
| 123 | Pam | 6/18/2013 |
| 123 | Nam | 2/12/2010 |
| 123 | Tam | 2/10/2013 |
| 456 | Jessi | 4/6/2003 |
| 457 | Ron | 4/10/2010 |
| 457 | Tom | 5/5/2008 |
+-----+---------+-----------+
所需的输出表:
+-----+---------+-----------+-----------+-----------+
| ID | insured | DOD1 | DOD2 | DOD3 |
+-----+---------+-----------+-----------+-----------+
| 123 | Pam | 6/18/2013 | 2/12/2010 | 2/10/2013 |
| 456 | Jessi | 4/6/2003 | null | null |
| 457 | Ron | 4/10/2010 | 5/5/2008 | null |
+-----+---------+-----------+-----------+-----------+
我在某处看到我们可以使用 pivot 和 unpivot,但我不确定如何在这里使用它。
非常感谢您的帮助。
解决方案
假设您真的想要 - 或可以接受 - 降序排列的日期,那么您可以为此使用条件聚合:
select id,
max(case when seqnum = 1 then insured end) as insured,
max(case when seqnum = 1 then dod end) as dod_1,
max(case when seqnum = 2 then dod end) as dod_2,
max(case when seqnum = 3 then dod end) as dod_3
from (select t.*,
row_number() over (partition by id order by dod desc) as seqnum
from t
) t
group by id;
如果您想保留原始顺序,那么您的问题没有足够的信息。如果您有一个带有排序的列,则可以用于row_number()
.
推荐阅读
- r - 将不同的 data.tables 子集导出到集群中的每个节点
- python - 删除特定的字符集?
- ms-access - 我如何使用 VBA 代码合并多个 pdf 文件
- entity-framework - .Net MVC Linq 查询
- c# - 用于方法的命名可选参数
- python - 我有一个 CSV,想用另一个 CSV 中的值更新它。最有效的方法是什么?
- ruby-on-rails - 使用 activity_notification 未收到通知
- r - 当我从 txt 文件中读取时,它作为一列返回 -R
- apache-spark - Spark SQL 为 HIVE 表中的列返回空值,而 HIVE 查询返回非空值
- reactjs - 在 React 中发布更改的表单字段值