【发布时间】:2017-12-14 23:37:16
【问题描述】:
我正在运行以下基本SQL 查询:
SELECT
a.project_name,
CASE
WHEN to_char(date_trunc('month', u.billing_period_start), 'MM-YYYY') = '07-2016' THEN 'July_2016'
WHEN to_char(date_trunc('month', u.billing_period_start), 'MM-YYYY') = '08-2016' THEN 'August_2016'
WHEN to_char(date_trunc('month', u.billing_period_start), 'MM-YYYY') = '09-2016' THEN 'September_2016'
END AS billing_month,
u.unique_visitor_count AS visitors
FROM table_1 u,
(SELECT
a.account_id AS project_id,
a.project_name
FROM table_2 a) a
WHERE u.project_id = a.project_id
AND date_trunc('month', u.billing_period_start) BETWEEN '2016-07-01' AND '2016-09-01'
ORDER BY 1, 2;
这个查询让我得到以下结果集:
project_name | month_name | visitors
-------------|----------------|---------
name_1 | August_2016 | 0
name_1 | July_2016 | 0
name_1 | September_2016 | 0
name_2 | August_2016 | 0
name_2 | July_2016 | 0
name_2 | September_2016 | 0
name_3 | August_2016 | 39
name_3 | July_2016 | 68
name_3 | September_2016 | 25
name_4 | August_2016 | 536914
name_4 | July_2016 | 16142
name_4 | September_2016 | 487117
我正在尝试使用以下crosstab() 查询:
我想把上面的第一个结果集变成如下:
project_name | July_2016 | August_2016 | September_2016
------------|-----------|-------------|---------------
name_1 | 0 | 0 | 0
name_2 | 0 | 0 | 0
name_3 | 68 | 39 | 25
name_4 | 16142 | 536914 | 487117
但是我收到了错误:
错误:返回和 sql 元组描述不兼容
对于visitors,我永远不会有任何空或缺失的结果。我已经阅读了关于crosstab() 的第二个参数的先前帖子,但我认为我在这里不需要它。我尝试将crosstab() 中的INTEGER 列更改为NUMERIC,但仍然收到相同的错误。
我做错了什么?有人可以提供修改后的、有效的 crosstab() 查询来向我展示修复方法吗?
【问题讨论】:
标签: sql postgresql crosstab