我try 将按T.ID分组的状态计数行返回到T.ID的单行输出中

我曾try 使用LISTAGG,但由于分组错误而陷入困境.

基本的SQL如下:

SELECT T.ID ,T.STATUS ||':'||COUNT(T.STATUS)||'; '
  FROM TRANSACTION T
  GROUP BY T.STATUS, T.ID; 

因此,这将返回许多行(正如预期的那样),但我希望具有相同T.ID的返回返回单行,如下所示:

ID RESULTS
1000 C:1
1231 C:2, S:3, E:1

推荐答案

汇总两次-首先使用IDSTATUS生成计数,然后汇总每个ID的所有状态和计数:

SELECT ID,
       LISTAGG(status || ':' || status_count, ', ')
         WITHIN GROUP (ORDER BY status) AS results
FROM   (
  SELECT ID,
         STATUS,
         COUNT(STATUS) AS status_count
  FROM   TRANSACTION
  GROUP BY
         ID,
         STATUS
)
GROUP BY
       ID;

其中,对于样本数据:

CREATE TABLE transaction (ID, status) AS
  SELECT 1000, 'C' FROM DUAL UNION ALL
  SELECT 1231, 'C' FROM DUAL UNION ALL
  SELECT 1231, 'C' FROM DUAL UNION ALL
  SELECT 1231, 'S' FROM DUAL UNION ALL
  SELECT 1231, 'S' FROM DUAL UNION ALL
  SELECT 1231, 'S' FROM DUAL UNION ALL
  SELECT 1231, 'E' FROM DUAL;

输出:

ID RESULTS
1000 C:1
1231 C:2, E:1, S:3

fiddle

Sql相关问答推荐

在SQL中向每个子字节组添加字节行

SQL查询以创建手头的流动余额?

如何将资源密集型自连接转换为更快的查询?

使用SQL旋转表的列(Snowflake)

不可能在SQL MERGE子句中引发异常

Stack Exchange站点上的最短帖子(按正文长度计算,用户名为原始发帖(SEDE))

Oracle SQL-将结果列在单行中

当交叉联接3个或更多表时,实体框架中是否会传输冗余的行数据并占用数据库带宽?

在SQL中返回缺省值,即使查询不返回任何结果

我可以在SQLite3中使用BLOB作为主键吗?

对于多字节字符,SQL Server中的DATALENGTH返回1字节

在 postgres 中插入或更新 jsonb 数组的对象

Oracle 21c 中的递归查询回顾过go 3 周

PostgreSQL-用第一个非空填充以前的值

BigQuery导航函数计算ID

创建定时器以更新Gridview

字符串从更改到表列和查询中的一行的转换错误

如何根据 Amazon Athena 中的多个列值删除重复行?

交叉应用 OPENJSON / PIVOT - 错误的顺序

从 JSON 数组中移除对象