Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 如何在列表中使用chr(10)?_Oracle_Oracle11g - Fatal编程技术网

Oracle 如何在列表中使用chr(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

我需要在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
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"