仅在一行中组合SQL行(Oracle)

时间:2017-08-18 14:00:48

标签: sql oracle oracle10g

我在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使用了两列并产生了多行。

3 个答案:

答案 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