【发布时间】:2013-11-24 14:18:59
【问题描述】:
我的表格是这样的:
rpt_date | shipping_id | total_usage
--------------------------------------
2013-11-01 | 1 | 10
2013-11-01 | 2 | 2
2013-11-01 | 3 | 5
2013-11-02 | 1 | 15
2013-11-02 | 4 | 1
2013-11-03 | 1 | 20
2013-11-03 | 2 | 3
我想使用单个查询来获得这样的结果:
rpt_date | 1 (shipping _id) | 2 (shipping_id) | 3 (shipping_id) | 4 (shipping_id)
-----------------------------------------------------------------------------------
2013-11-01 | 10 (total_usage) | 2 | 5 | 0
2013-11-02 | 15 | 0 | 0 | 1
2013-11-03 | 20 | 3 | 0 | 0
我应该如何查询这个?我正在尝试这样查询
SELECT
rpt_date,
CASE WHEN shipping_id = 1 THEN total_usage ELSE 0 END AS a,
CASE WHEN shipping_id = 2 THEN total_usage ELSE 0 END AS b,
CASE WHEN shipping_id = 3 THEN total_usage ELSE 0 END AS c,
CASE WHEN shipping_id = 4 THEN total_usage ELSE 0 END AS d
FROM
Table A
WHERE
DATE(rpt_date) BETWEEN '2013-11-01' AND '2013-11-03'
GROUP BY
rpt_date
ORDER BY
rpt_date
上面的查询给出了shipping_id 和total_usage 必须是GROUP BY 的一部分的错误。我的查询有什么问题?
【问题讨论】:
-
它给出了这一点,因为它不知道如何处理 total_usage,它不是“清楚的”。你告诉它按某事分组,但没有告诉它如何处理另一个。为什么还要分组?你没有用它做任何事情(没有分组功能)
-
Total_usage 正在设置但从未使用过 - 为什么要麻烦?
-
是的,我知道我的查询是错误的。我的观点是如何使用单个查询来获得上面提到的结果?可能你有其他方法来查询得到上面的结果吗?非常感谢您的帮助.. tq
标签: sql postgresql group-by pivot