2015-04-18 33 views
1

組合多列表中的一個字段的值。組合多列Oracle 11g表中的一個字段的值

T1在幾列中有重複值,然後是最後一列中的非唯一值。需要返回前6列中的唯一值,然後組合最後一列中的非唯一值。 Col1是焦點,所以累積來自col7中的各種值。中間的列並不重要,它們可以是唯一的或非唯一的。他們確實需要顯示在返回的值。

樣品被高度簡化的現實問題,但手頭的事情就是回到COL1,兩者之間的一切,然後拼接從COL7累積值

CREATE TABLE T1 
    (
    COL1 NUMBER, 
    COL2 NUMBER, 
    COL3 NUMBER, 
    COL4 NUMBER, 
    COL5 NUMBER, 
    COL6 NUMBER, 
    COL7 NUMBER);-- 


INSERT INTO T1 VALUES(1, 2, 3, 4, 5, 6, 7); 
INSERT INTO T1 VALUES(1, 2, 3, 4, 5, 6, 97); 
INSERT INTO T1 VALUES(1, 2, 3, 4, 5, 6, 147); 

Desired results 
    COL1, COL2, COL3,  COL4,  COL5,  COL6,  COL7 
     1 2   3   1   2   3  7, 97,147 

我想這將需要兩個自加入連接,但不知道如何創建腳本。

任何和所有的建議和見解讚賞。

+0

LISTAGG功能可以幫助你。 – voter

+0

感謝您的回覆。 SELECT COL1,LISTAGG(COL7, '')在組(ORDER BY COL1)姓名 FROM( 選擇唯一 COL7, COL1 從T1 ) GROUP BY COL1 – user761758

+0

我不能讓顯示器格式代碼,但它確實工作,給我幾乎所有我需要的東西。我仍然無法工作的是將列I添加到1到7之間。listagg爲col 1和col7提供了所需的結果,但是在任何地方我嘗試添加其他列時,出現錯誤。 – user761758

回答

1

首先,col1如果表中有重複值,則不是主鍵。你需要檢查你對術語的使用。

你可以用聚集做到這一點:

select col1, col2, col3, col4, col5, col6, 
     listagg(col7, ',') within group (order by col7) as col7s 
from t1 
group by col1, col2, col3, col4, col5, col6; 
+0

謝謝!我的道歉..我在所有其他事情完成後添加了非唯一值,並且沒有返回並更改文本。你的回答是確切的,並給我我正在尋找的東西..謝謝! – user761758

相關問題