Oracle 如何在列表中使用chr(10)?
我需要在listagg中插入一个char(10),但它没有按预期工作Oracle 如何在列表中使用chr(10)?,oracle,oracle11g,Oracle,Oracle11g,我需要在listagg中插入一个char(10),但它没有按预期工作 select ID, listagg(value , chr(10))within group (order by ID) as "value" from DTA group by ID 以下是我写的脚本: select ID, listagg(value , ';')within group (order by ID) as "value" from DTA group by ID Current Result I
select ID, listagg(value , chr(10))within group (order by ID) as "value"
from DTA
group by ID
以下是我写的脚本:
select ID, listagg(value , ';')within group (order by ID) as "value"
from DTA
group by ID
Current Result
ID |value |
----|-----------|
1 |aaa;bbb;ccc|
2 |abc |
3 |abe |
Desired Result
ID |value
----|------
1 |aaa
|bbb
|ccc
----|------
2 |abc
----|------
3 |abe
我试着用这个,但没有达到预期效果
select ID, listagg(value , chr(10))within group (order by ID) as "value"
from DTA
group by ID
如何改进脚本?您的代码是正确的。您需要一个能够显示换行符的工具:
WITH DTA AS (
SELECT 1 AS ID, 'A' AS Value FROM dual
UNION ALL
SELECT 1 AS ID, 'B' FROM dual
)
select ID, listagg(value , chr(10))within group (order by ID) as "value"
from DTA
group by ID;
输出:
ID value
1 A
B
使用PIVOT尝试下面的查询,使用listag很难实现chr(10)
WITH sample_data AS (SELECT 1 ID, 'aaa' value FROM dual UNION ALL
SELECT 1 ID, 'bbb' value FROM dual UNION ALL
SELECT 1 ID, 'ccc' value FROM dual UNION ALL
SELECT 2 ID, 'abc' value FROM dual UNION ALL
SELECT 3 ID, 'abe' value FROM dual )
SELECT CASE WHEN row_number() OVER (PARTITION BY DTA_ID
ORDER BY CASE
WHEN column_name = 'VALUE' THEN 1
END) = 1
THEN DTA_ID
END "Current ID",
vals "Result Value"
FROM (SELECT ID DTA_ID,
VALUE
FROM sample_data)
UNPIVOT (vals FOR column_name IN ("VALUE"))
ORDER BY DTA_ID;
这可能有助于满足您的要求
select ID, listagg(value , || CHR (10)) within group (order by ID) as "value"