Query
將數據堆疊到單個列中
SELECT *
會導致:course_id + group ----------------- 1 + SE123 1 + BA134 2 + SE213 3 + SE223 3 + BA344 4 + SE222
我希望它是這樣的:
course_id + group --------------------- 1 + SE123/BA134 2 + SE213 3 + SE223/BA344 4 + SE222
我怎樣才能做到這一點?
對於 Oracle 11.2+,您可以使用LISTAGG執行此操作。這是一個展示。
設置:
DROP TABLE t1; CREATE TABLE t1 (Course_Id Number(1), Group_Id Varchar2(20)); INSERT INTO t1 VALUES (1,'SE123'); INSERT INTO t1 VALUES (1,'BA134'); INSERT INTO t1 VALUES (2,'SE213'); INSERT INTO t1 VALUES (3,'SE223'); INSERT INTO t1 VALUES (3,'BA344'); INSERT INTO t1 VALUES (4,'SE222');
詢問:
SELECT Course_ID, LISTAGG(Group_ID, '/') WITHIN GROUP (ORDER BY Group_ID DESC) FROM t1 GROUP BY Course_ID;
輸出:
COURSE_ID GROUPS --------- -------------------- 1 SE123/BA134 2 SE213 3 SE223/BA344 4 SE222
如果您還沒有使用 11.2,這裡有一些其他的 Oracle 字元串聚合技術。
您能否更具體地說明您要達到的目標?
我很樂意幫助你。
但正如您所說,我認為您想將所有數據放在一列中。為此,您可以使用以下提到的方法:
- 連接(字元串 1,字元串 2)
在這裡你可以只連接兩個字元串。(concat 是 Oracle 內置函式)
- SELECT ‘名字是’ || 名字 || 來自員工的姓氏;
在這裡,您可以使用 (||) 管道運算符連接列。
任何意見將不勝感激。