首页 > 解决方案 > 在 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

有没有办法做到这一点?

标签: postgresql

解决方案


推荐阅读