Jam*_*mie 5 sql postgresql pivot crosstab
我有以下brands表格,其中包含以前查询的total每个销售额month:
id | date | total
-----+----------+------
123 | Apr-2012 | 100
123 | Mar-2012 | 150
123 | Jan-2012 | 500
987 | Apr-2012 | 5
987 | Mar-2012 | 0.10
987 | Feb-2012 | 8
Run Code Online (Sandbox Code Playgroud)
我期待实现以下目标:
id | Apr-2012 | Mar-2012 | Feb-2012 | Jan-2012
123 | 100 | 150 | 0 | 500
987 | 5 | 0.10 | 8 | 0
Run Code Online (Sandbox Code Playgroud)
如何将date值用作列,并能够用0总计填写缺少的日期?
crosstab()您的示例的查询将如下所示:
要填写0结果NULL值(请求注释),请使用COALESCE():
SELECT brand_id
, COALESCE(jan, 0) AS "Jan-2012"
, COALESCE(feb, 0) AS "Feb-2012"
, COALESCE(mar, 0) AS "Mar-2012"
, COALESCE(apr, 0) AS "Apr-2012"
FROM crosstab(
'SELECT brand_id, month, total
FROM brands
ORDER BY 1'
,$$VALUES ('Jan-2012'::text), ('Feb-2012'), ('Mar-2012'), ('Apr-2012')$$
) AS ct (
brand_id int
, jan numeric -- use actual data type!
, feb numeric
, mar numeric
, apr numeric);
Run Code Online (Sandbox Code Playgroud)
此相关答案中的详细说明和链接:
PostgreSQL交叉表查询
除此之外:不使用保留字"date"作为列名,即使Postgres允许,也不应该使用保留字"date".
| 归档时间: |
|
| 查看次数: |
7201 次 |
| 最近记录: |