【发布时间】:2021-04-19 18:08:44
【问题描述】:
我的问题是:我有一个返回此表的查询:
解释表格:它显示了一些问题及其数字答案(数字 0 可以表示否,数字 1 可以表示是,数字 2 可以表示一点等等)我想要的是这张表变成这样:
所以它告诉我每个答案选项中有多少个答案。但是,响应选项的数量会有所不同。在此示例中,我有 0 到 4 的选项,但在某些情况下选项从 0 到 10。那么,如何为每个选项创建列?
我的查询是这样的:
SELECT
data,
id,
question,
answer,
COUNT(*) AS info2,
COUNT(CASE WHEN answer IS NOT NULL THEN 1 END) AS info3,
COUNT(CASE WHEN answer IS NULL THEN 1 END) AS info4
FROM table1
JOIN table2
ON table1.id = table2.id
WHERE table1.variable_y BETWEEN '2020-01-01 00:00:00' AND '2020-05-31 23:59:59'
AND variable_x = 'ABC123'
AND variable_z = 'ABC'
GROUP BY 1,2,3,4
【问题讨论】:
-
欢迎来到 SO 社区。请花几分钟时间拨打Tour 并查看How to Ask。具体来说,将完整的表格定义 (ddl) 和示例日期显示为文本 -无图像(或提供 fiddle 和该数据的预期结果 - 也作为文本。我确实注意到你想要结果显示 "... res0, res1... info2, info3..." 但查询只返回 "...info2, info3..."。'res...' 列及其来源是什么?跨度>
-
简单地说:你不能。 SQL 的基本限制之一是必须知道查询的所有列在查询实际执行之前。所以在解析语句时必须对每列的编号、名称和数据类型进行评估。您将必须编写尽可能多的表达式,因为您可以拥有列。例如写 50 篇作好准备。这种格式(将行转换为列)在前端做得更好。 SQL 根本不是为此而设计的。
-
嗨@Luuk。我的问题出在 postgresql 中,所以对我没有帮助。
标签: sql postgresql pivot