postgresql - 在 Postgres 中透视 CTE 的结果
问题描述
我有一个带有许多 CTE 的大型 SQL 语句(PostgreSQL 版本 11),我想使用来自中间 CTE 的结果来创建一组 PIVOTed 结果并将其与其他 CTE 连接。
下面是我查询的一小部分,而 CTE“previous_months_actual_sales”是我需要 PIVOT 的。
,last_24 as
(
SELECT l_24m::DATE + (interval '1' month * generate_series(0,24)) as last_24m
FROM last_24_month_start LIMIT 24
)
,previous_months_actual_sales as
(
SELECT TO_CHAR(created_at,'YYYY-MM') as dates
,b.code,SUM(quantity) as qty
FROM base b
INNER JOIN products_sold ps ON ps.code=b.code
WHERE TO_CHAR(created_at,'YYYY-MM')
IN(SELECT TO_CHAR(last_24m,'YYYY-MM') FROM last_24)
GROUP BY b.code,TO_CHAR(created_at,'YYYY-MM')
)
SELECT * FROM previous_months_actual_sales
此 CTE“previous_months_actual_sales”的结果如下所示,
dates code qty
"2018-04" "0009" 23
"2018-05" "0009" 77
"2018-06" "0008" 44
"2018-07" "0008" 1
"2018-08" "0009" 89
基于上述结果的预期输出是,
code. 2018-04. 2018-05. 2018-06. 2018-07. 2018-08
"0009". 23 77 89
"0008". 44 1
有没有办法做到这一点?
解决方案
推荐阅读
- android - 如何在其他 Android 手机上启用 ARCore
- python - python中2个日期之间的差异
- android - React Native:BLE,发现和广播(广告数据)
- javascript - JSON stringify 在有空格或非字母字符时创建下划线,为什么?
- gnuplot - gnuplot:如何避免使用填充曲线缩放到 0?
- c# - 将文件Linux服务器保存到Windows服务器时找不到路径c#的一部分
- mysql - My SQL 存储过程中的 ELSEIF 异常
- html - 如何更改 matInput 占位符的字体颜色
- dropwizard - 在 Dropwizard 2.x 中注册 ContainerRequestFilter 的推荐方法是什么?
- r - 使用 r 从 dataPreparation 包中使用 whichAreBijection 命令识别的数据框中自动删除双射列