oracle sql中的列更改为行

时间:2015-05-04 09:20:04

标签: sql oracle

我在表x中有列a,b。我想将此列数据更改为行。 可能在表中有重复的值,但在行的列中只更改不同的值。

E.G:
a    b
1    2
1    11
3    4
5    6
7    8
9    10
......etc

result 1 (query 1) should be 1-2,1-11,3-4,5-6,7-8,9-10.....

result 2 (query 2) should b 1,3,5,7,9....等(只有一个1必须来,因为我们有列a的重复数据)

我如何在oracle SQL中实现这一点。

请帮忙。

1 个答案:

答案 0 :(得分:0)

对于Oracle 11,使用函数listagg()并在第一个查询中连接列,在第二个 - 首先选择不同的值。

查询1:

select listagg(a||'-'||b, ',') within group (order by a, b) result from t

RESULT
------------------------------
1-2,1-11,3-4,5-6,7-8,9-10

查询2:

select listagg(a, ',') within group (order by a) result 
  from (select distinct a from t)

RESULT
------------------------------
1,3,5,7,9

对于旧版本,您可以使用wmsys.wm_concat