2016-04-30 43 views
0

我正在開展一個項目,需要一些幫助。爲了很好地解決問題,我創建了樣本數據和期望的結果格式。我有一個三列的表。所有三行都可以有重複的數據,但CodeA,CodeB,CodeC的組合是唯一的。我需要有一個Oracle SQL查詢(不是存儲過程),以便我可以在右側以下列格式生成以逗號分隔的數據。逗號分隔的行中的值需要不同。此外,字段1應按排序順序。如何加入兩個sql查詢的結果?

enter image description here

我創建的查詢是在這裏,但與下面的問題是唯一的,這不是讓我DISTINCT值。例如,在輸出集的第1行,我得到了 A1 B1,B1,B2,B3 C1,C1,C2,C2 這是我不想要的。有誰能夠幫助我?

SELECT CodeA As "Field 1", 
LISTAGG(CodeB, ',') WITHIN GROUP (ORDER BY CodeA) AS "Field 2", 
LISTAGG(CodeC, ',') WITHIN GROUP (ORDER BY CodeA) AS "Field 3" 
FROM Table 
GROUP BY CodeA 
UNION 
SELECT CodeB As "Field 1", 
LISTAGG(CodeA , ',') WITHIN GROUP (ORDER BY CodeB) AS "Field 2", 
LISTAGG(Code3, ',') WITHIN GROUP (ORDER BY CodeB) AS "Field 3" 
FROM Table 
GROUP BY CodeB; 

回答

0

嘗試:

select x.codea, x.codeb, y.codec 
from 
(
    select codea, listagg(codeb,',') within group (order by codeb) as codeb 
    from (select distinct codea, codeb from tbl) 
    group by codea 
) x 
join 
(
    select codea, listagg(codec,',') within group (order by codec) as codec 
    from (select distinct codea, codec from tbl) 
    group by codea 
) y 
    on x.codea = y.codea