我在PL / SQL Developer上使用Oracle数据库,我希望将查询的结果行合并为一行。
我有这个:
Column 1
1. Row 1
2. Row 2
3. Row 3
我想要这个:
Column 1
1. Row 1, Row 2, Row 3
我的查询:
SELECT DISTINCT produto.ds_produto || ' Lote ->' || itmvto_estoque.cd_lote || 'Validade ->' || itmvto_estoque.dt_validade
FROM itmvto_estoque, mvto_estoque, produto, atendime
WHERE itmvto_estoque.cd_mvto_estoque = mvto_estoque.cd_mvto_estoque
AND produto.cd_produto = itmvto_estoque.cd_produto
AND mvto_estoque.cd_atendimento = 1532174
AND produto.cd_especie = 1
数据库版本为10。
我在这里发现了一些类似的问题(like this one),但所有这些问题都有些不同,因为我需要在一列中完成。
编辑:例如,答案here使用了两列并产生了多行。
答案 0 :(得分:2)
如果您至少没有Oracle 11,则无法使用LISTAGG
。因此,一种替代方法是使用XMLAGG
,如下所示:
select
rtrim(xmlagg(xmlelement(e, column1, ', ')).extract('//text()').getclobval(), ',')
from your_table
请注意,如果需要某种形式的分组,这可能不起作用,但这有助于您入门。
答案 1 :(得分:0)
您可能知道,PL / SQL中的PIVOT函数直到Oracle 11g才出现。
以下文章提供了一些比我更简洁的选项。
http://oraclecoder.com/tutorials/three-ways-to-transpose-rows-into-columns-in-oracle-sql--160
答案 2 :(得分:0)
试试这个。我无法获得信誉,我在此处找到了它:https://dba.stackexchange.com/questions/171997/how-to-obtain-the-functionality-of-listagg-function-in-oracle-10g
SQL> with tbl(col1) as (
select 'Row 1' from dual union all
select 'Row 2' from dual union all
select 'Row 3' from dual
)
SELECT SUBSTR(SYS_CONNECT_BY_PATH (col1, ', '), 3) col1
FROM (SELECT col1 , ROW_NUMBER () OVER (ORDER BY col1 ) rn,
COUNT (*) OVER () cnt
FROM tbl)
WHERE rn = cnt
START WITH rn = 1
CONNECT BY rn = PRIOR rn + 1;
COL1
----------------------------------------------------------------------
Row 1, Row 2, Row 3