Query

將數據堆疊到單個列中

  • September 6, 2012

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. 連接(字元串 1,字元串 2)

在這裡你可以只連接兩個字元串。(concat 是 Oracle 內置函式)

  1. SELECT ‘名字是’ || 名字 || 來自員工的姓氏;

在這裡,您可以使用 (||) 管道運算符連接列。

任何意見將不勝感激。

引用自:https://dba.stackexchange.com/questions/14795