由于之前的查询,我有以下品牌表,每月总销售额:
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
我期待实现以下目标:
id | Apr-2012 | Mar-2012 | Feb-2012 | Jan-2012 123 | 100 | 150 | 0 | 500 987 | 5 | 0.10 | 8 | 0
如何将日期值用作列,并能够用0总计填写缺失日期?
解决方法
您的示例的
crosstab()
查询将如下所示:
要为结果NULL值填写0(注释中的请求),请使用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);
相关答案中的详细说明和链接:
PostgreSQL Crosstab Query
除此之外:不使用保留字“date”作为列名,即使Postgres允许,也不应该使用保留字“date”.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。