2014-12-04 102 views
0

我有這樣的結果從選擇這樣多個結果行

Select a.Header1, a.Header2, a.Header3, b.header4, 
From a 
Join b on a.id = b.id 

給這個結果

Head1 Head2 Head3 Head4 
1   A  1  AA 
1   A  1  BB 
1   A  1  CC 
1   A  2  AA 
1   A  2  CC 
1   A  2  DD 
1   A  2  EE 

是它有可能

Head1 Head2 Head3 Head4 
1   A  1  AA BB CC 
1   A  2  AA   CC DD EE 

頭像4被拆分成不同的列

+1

假設你不需要額外的列,但你只是想列出的數據列於第4列,您可以用'listagg'。如果沒有,你會想看看'pivoting'。 – sgeddes 2014-12-04 19:02:44

+0

什麼版本的oracle?如果在10之前,可能必須使用'wm_concat'而不是listagg。 – xQbert 2014-12-04 19:06:15

+0

我想要不同的列。尋找pivoting然後 – Jeanseb 2014-12-04 19:06:40

回答

2

不完全。您可以使用listagg()函數將值連接成一個列,然後您可以在事實之後進行拆分。例如:

SELECT 
    a.Header1, 
    a.Header2, 
    a.Header3, 
    listagg(b.Header4, ', ') WITHIN GROUP (ORDER BY b.Header4) AS Header4 
FROM a 
JOIN b ON a.id = b.id 
GROUP BY 
    a.Header1, 
    a.Header2, 
    a.Header3 

會產生:

Header1 Header2 Header3 Header4 
1   A   1   AA, BB, CC 
1   A   2   AA, CC, DD, EE