sql - 在雪花的 PIVOT 期间保持多行
问题描述
我想将行转换为雪花中的列。
假设我有下表 BASE
ID | 价值 | 类型 |
---|---|---|
1 | 100 | '一个' |
1 | 200 | '乙' |
1 | 300 | '乙' |
2 | 400 | '一个' |
输出应如下所示:
ID | 一个 | 乙 |
---|---|---|
1 | 100 | 200 |
1 | 100 | 300 |
2 | 400 | 无效的 |
目前我正在用
SELECT ID,
CASE WHEN TYPE = 'A' THEN VALUE ELSE NULL AS A,
CASE WHEN TYPE = 'B' THEN VALUE ELSE NULL AS B
FROM BASE
目前缺少 GROUP BY 语句。通常我会按 ID 分组,但这并不能说明在相同的 TYPE 和 ID 上为每个值保留一行。
任何想法如何实现这一目标?
干杯,P
解决方案
您可以使用条件聚合。您可以使用row_number()
获取多行:
SELECT ID,
MAX(CASE WHEN TYPE = 'A' THEN VALUE END) AS A,
MAX(CASE WHEN TYPE = 'B' THEN VALUE END) AS B
FROM (SELECT B.*,
ROW_NUMBER() OVER (PARTITION BY ID, TYPE ORDER BY VALUE) as seqnum
FROM BASE B
) B
GROUP BY ID, seqnum;
推荐阅读
- php - 向表中添加新数据时如何包括时间而不是仅包含日期 - PHP
- c++ - 以字符串计数
- javascript - 在Javascript中推送数组中的项目?
- angular - 如何改变角度材料进度旋转器的速度旋转
- python - 仅将一个答案标记为已接受
- python - 未在 Tkinter(Treeview)上进行更改
- python-3.x - 如何检测用户是否加入任何语音频道?
- flutter - 当我运行颤振应用程序显示警告:映射新的 ns http://schemas.android.co
- node.js - 代理 https 到 http(示例)不起作用 - node-http-proxy
- mysql - SQL sort by desc 不适用于 group by