【发布时间】:2015-02-09 19:45:49
【问题描述】:
我使用LISTAGG 来处理很多列。
所以我必须做GROUP BY所有这些列。
有没有更整洁的方法来做到这一点?
喜欢 'group by all minus listagg...' ?
【问题讨论】:
-
你能发布一些示例代码吗?
-
没有更整洁的方式。您必须列出 GROUP BY 子句中的所有列(常量、聚合和一些表达式除外)。
我使用LISTAGG 来处理很多列。
所以我必须做GROUP BY所有这些列。
有没有更整洁的方法来做到这一点?
喜欢 'group by all minus listagg...' ?
【问题讨论】:
您有示例表吗?你在加入表格吗?此示例使用连接,但 LISTAGG 列不在 group by 语句中。
这是我为另一个我编辑的问题所做的示例。
SELECT c.id,
c.model,
LISTAGG(d.name, ',')
within GROUP (ORDER BY d.name) AS "Drivers",
LISTAGG(c.color, ',')
within GROUP (ORDER BY c.color) AS "Colors"
FROM TBLCARS c
join TBLDRIVERS d
ON c.id = d.fid_tblcars
GROUP BY c.id,
c.model
ORDER BY c.id
这是一个使用 WITH 子句的方法,您可以使用 CTE 并构建更大的查询。
WITH cte
AS (SELECT c.id,
LISTAGG(c.color, ',')
within GROUP (ORDER BY c.color) AS "Colors",
LISTAGG(c.model, ',')
within GROUP (ORDER BY c.model) AS "Model",
LISTAGG(d.name, ',')
within GROUP (ORDER BY d.name) AS "Name"
FROM TBLCARS c
join TBLDRIVERS d
ON c.id = d.fid_tblcars
GROUP BY c.id)
SELECT *
FROM cte
【讨论】: