【发布时间】:2019-03-08 22:30:55
【问题描述】:
我正在尝试创建一个简单的类似于数据透视表的报表,我设法使用 SQL Server 的 pivot 完成了该报表,但现在 SQL 需要在 SQL Server 和 Postgresql 上运行。
所以,我已将 SQL 更改为使用 CASE,如下所示:
SELECT SPACENAME
, CASE WHEN PERMTYPE='VIEWSPACE' THEN 'X' END AS "Read Access"
, CASE WHEN PERMTYPE='EDITSPACE' THEN 'X' END AS "Write Access"
FROM ( ...) sub
GROUP BY SPACENAME, PERMTYPE
ORDER BY SPACENAME
“...”是复杂子查询所在的位置,其输出为:
SPACENAME PERMTYPE
Testware Releases EDITSPACE
Testware Releases VIEWSPACE
Documentation VIEWSPACE
我正在尝试获取如下报告:
SPACENAME Read Access Write Access
Testware Releases X X
Documentation X
但我得到的是:
SPACENAME Read Access Write Access
Testware Releases X
Testware Releases X
Documentation X
我在这里的另一个示例上构建了我的CASE:PostgreSQL crosstab() alternative with CASE and aggregates)
只有两个区别:
- 另一个答案只在
GROUP BY中放置一列。我同意这是有道理的,但是当我这样做时,我得到一个错误:Column 'sub.PERMTYPE' 在选择列表中是无效的,因为它既不包含在聚合函数或 GROUP BY 子句中。 - 另一个答案在
CASE中使用sum()。如果我这样做(连同GROUP BY中的单列),我可以让它工作,但它会显示一个基于数字的报告,但我真的只想要右列中的“X”...
有什么方法可以让列中的 X 而不是数字?
【问题讨论】:
标签: sql sql-server postgresql