如何使用逗号作为分隔符将多行转换为一行 - Oracle 数据库
How to Convert multiple rows into one with comma as separator - Oracle db
我有一个 oracle table,它有 id 和 order_id 列。 Table 具有相同的 order_id,但 ID 不同。
如何为相同的 order_id 组写一个 select,并显示在一行中,用逗号分隔;
Example;
ORDER_ID ID
623cdc7ff2f3603b06a283ff 8112686
623cdc7ff2f3603b06a283ff 8116869
623cdc7ff2f3603b06a28400 8117671
623ce4068c47be1532c4c53c 8118392
Select结果应该是这样的;
ORDER_ID ID
623cdc7ff2f3603b06a283ff 8112686 , 8116869
623cdc7ff2f3603b06a28400 8117671
623ce4068c47be1532c4c53c 8118392
listagg 函数来拯救:
select order_id, listagg(id,', ')
from test
group by order_id
或者,对于旧版本的 Oracle,您可以使用 WM_CONCAT 函数。 LISTAGG 出现在 Oracle 11g 第 2 版中。
WITH
tbl AS
(
SELECT '623cdc7ff2f3603b06a283ff' "ORDER_ID", '8112686' "ID" FROM DUAL UNION ALL
SELECT '623cdc7ff2f3603b06a283ff' "ORDER_ID", '8116869' "ID" FROM DUAL UNION ALL
SELECT '623cdc7ff2f3603b06a28400' "ORDER_ID", '8117671' "ID" FROM DUAL UNION ALL
SELECT '623ce4068c47be1532c4c53c' "ORDER_ID", '8118392' "ID" FROM DUAL
)
-- ----------------------------------------------------------------------------------
Select ORDER_ID, WMSYS.WM_CONCAT(ID)
From tbl
Group By ORDER_ID
李斯塔格
Select ORDER_ID, LISTAGG(ID, ', ') WITHIN GROUP (ORDER BY ID)
From tbl
Group By ORDER_ID
我有一个 oracle table,它有 id 和 order_id 列。 Table 具有相同的 order_id,但 ID 不同。
如何为相同的 order_id 组写一个 select,并显示在一行中,用逗号分隔;
Example;
ORDER_ID ID
623cdc7ff2f3603b06a283ff 8112686
623cdc7ff2f3603b06a283ff 8116869
623cdc7ff2f3603b06a28400 8117671
623ce4068c47be1532c4c53c 8118392
Select结果应该是这样的;
ORDER_ID ID
623cdc7ff2f3603b06a283ff 8112686 , 8116869
623cdc7ff2f3603b06a28400 8117671
623ce4068c47be1532c4c53c 8118392
listagg 函数来拯救:
select order_id, listagg(id,', ')
from test
group by order_id
或者,对于旧版本的 Oracle,您可以使用 WM_CONCAT 函数。 LISTAGG 出现在 Oracle 11g 第 2 版中。
WITH
tbl AS
(
SELECT '623cdc7ff2f3603b06a283ff' "ORDER_ID", '8112686' "ID" FROM DUAL UNION ALL
SELECT '623cdc7ff2f3603b06a283ff' "ORDER_ID", '8116869' "ID" FROM DUAL UNION ALL
SELECT '623cdc7ff2f3603b06a28400' "ORDER_ID", '8117671' "ID" FROM DUAL UNION ALL
SELECT '623ce4068c47be1532c4c53c' "ORDER_ID", '8118392' "ID" FROM DUAL
)
-- ----------------------------------------------------------------------------------
Select ORDER_ID, WMSYS.WM_CONCAT(ID)
From tbl
Group By ORDER_ID
李斯塔格
Select ORDER_ID, LISTAGG(ID, ', ') WITHIN GROUP (ORDER BY ID)
From tbl
Group By ORDER_ID