求助,oracle多行資料合併成一行

時間 2022-01-29 12:00:18

1樓:匿名使用者

select (wm_concat(t.name)) as allname from test t

注意資料庫的限制長度

2樓:匿名使用者

我現在身邊沒有 資料庫環境 這個是我以前寫的sql

你看一下,修改一下就可以了

oracle分組查詢用逗號分隔結果sql語句

表一:學號 姓名

1 張三

2 李四

3 王五

。。。。

表二:學號 選修課程

1 語文

1 數學

2 英語

2 語文

3 數學

3 英語

3 歷史

。。。。。

要求查處結果

學好 姓名 選修課程所有課程名稱以,隔開

1 張三 語文,數學

2 李四 英語,語文

3 王五 數學,英語,歷史

;create table a_lyh_test

asselect 1 as "學號" , '張三' as "姓名" from dual

union all

select 2 as "學號" , '李四' as "姓名" from dual

union all

select 3 as "學號" , '王五' as "姓名" from dual

;create table b_lyh_test

asselect 1 as "學號" , '語文' as "選修課程" from dual

union all

select 1 as "學號" , '數學' as "選修課程" from dual

union all

select 2 as "學號" , '英語' as "選修課程" from dual

union all

select 2 as "學號" , '語文' as "選修課程" from dual

union all

select 3 as "學號" , '數學' as "選修課程" from dual

union all

select 3 as "學號" , '英語' as "選修課程" from dual

union all

select 3 as "學號" , '歷史' as "選修課程" from dual

;select f."學號"

,f."姓名"

,ltrim(max(sys_connect_by_path(f."選修課程",','))

keep (dense_rank last order by f.pnum),',') as "選修課程"

from

(select t."學號"

,t."姓名"

,t."選修課程"

,row_number() over(partition by t."學號" order by t."姓名") as pnum

,row_number() over(partition by t."學號" order by t."姓名")-1 as lnum

from

(select a."學號",a."姓名",b."選修課程"

from a_lyh_test a

,b_lyh_test b

where a."學號" = b."學號"

) t) f

group by f."學號",f."姓名"

connect by f.lnum = prior f.pnum and f."學號" = prior f."學號"

start with f.pnum = 1;

3樓:匿名使用者

select id ,listagg( name, ',' ) within group ( order by id ) as name

from table_name

group by id;

4樓:匿名使用者

select wm_concat(name) from test

5樓:匿名使用者

你這就是行轉列,行數太多不建議這樣做,有很多方法,典型的有decode,多寫幾個decode。

oracle資料庫多行資料合併為1行的問題,急用

6樓:匿名使用者

你看看是不是這樣的,你資料排版太混亂了

select csrq,qyph,pczl,wm_concat(jyxmmc),wm_concat(jyz),xydj,je from 表名 group by csrq,qyph,pczl,xydj,je

----------補充-----------

oracle跟sqlserver不一樣,如果儲存過程的話只能返回類似sqlserver中print那種

這樣的話,不知道能符合你要求不

表名我起的test

create table test

(csrq varchar2(10),

qyph varchar2(20),

pczl number(10,4),

jyxmmc varchar2(10),

jyz number(10,4),

xydj number(10,4),

je number(10,4))

insert into test values ('2014-5-6','201405070026',111.2300,'矽',3.1260,1280.

0000,954050.8544);

insert into test values ('2014-5-6','201405070026',111.2300,'碳',3.4580,1280.

0000,954050.8544);

insert into test values ('2014-5-6','201405070026',111.2300,'磷',0.0770,1280.

0000,954050.8544);

insert into test values ('2014-5-6','201405070026',111.2300,'鎳',6.7010,1280.

0000,954050.8544);

insert into test values ('2014-5-6','201405070026',111.2300,'鉻',2.5940,1280.

0000,954050.8544);

insert into test values ('2014-5-6','201405070026',111.2300,'硫',0.2020,1280.

0000,954050.8544);

執行select 'csrq','qyph','pczl',replace(wm_concat(jyxmmc),',','    '),'xydj','je' from test

union all

select to_char(csrq),to_char(qyph),to_char(pczl),replace(to_char(wm_concat(jyz)),',',' '),to_char(xydj),to_char(je) from test

group by to_char(csrq),to_char(qyph),to_char(pczl),to_char(xydj),to_char(je)結果

7樓:

select csrq,qyph,pczl,sum(case when jyxmmc='矽' then jyz else 0) as 矽,

sum(case when jyxmmc='碳' then jyz else 0) as 碳

......

from table_name

group by csrq,qyph,pczl;行轉列就是這樣,列舉值有多少寫多少

8樓:

用group by 分組吧

如何將oracle中同一列的多行記錄拼接成一個字串

9樓:刺友互

1、新建php檔案。

2、宣告陣列變數。

3、用implode函式使陣列拼接成字串,連線符為-。

4、輸出連線後的字串。

5、預覽效果如圖。

6、用implode函式使陣列拼接成字串,連線符為?。

7、預覽效果如圖。

10樓:匿名使用者

需要用wm_concat函式來實現。

如目前在emp表中查詢資料如下:

要按照deptno相同的將ename以字串形式合併,可用如下語句:

select deptno,wm_concat(ename) from emp group by deptno;

查詢結果:

11樓:笨笨

我們常常說 用sql將oracle中同一列的多行記錄拼接成一個字串是如何實現的:[sql]-- 原始資料-- a 111-- b 222-- a 333-- a 444-- b 555-- 最終結果-- a 111*333*444selectl4.l_time,max(substr(l4.

分組內容,2)) 最終欄位值from(selectl3.l_time,sys_connect_by_path(l3.l_content,'*') as 分組內容from(selectl2.

l_time,l2.l_content,l2.l_time||l2.

分組內編號 as 分組欄位加編號,l2.l_time||(l2.分組內編號-1) as 上級分組欄位加編號from(selectl1.

l_time -- 分組依據,l1.l_content -- 同一列中 要合併的不同行 的值,row_number() over (partition by l1.l_time order by l1.

l_content asc) 分組內編號from logs l1) l2) l3start with l3.上級分組欄位加編號 like '%0'connect by prior l3.分組欄位加編號=l3.

上級分組欄位加編號) l4where l_time='111'group by l4.l_time-- row_number() over(partition by a order by b desc) 新列名-- 根據a分組,在分組內部根據b排序,而此函式計算的值就表示每組內部排序後的順序編號(組內連續的唯一的)-- sys_connect_by_path 函式: 第一個引數是形成樹形式的欄位,第二個引數是父級和其子級分隔顯示用的分隔符-- connect by prior 是標示父子關係的對應-- start with 代表你要開始遍歷的的節點

求助,oracle多行資料合併成一行

select wm concat t.name as allname from test t 注意資料庫的限制長度 我現在身邊沒有 資料庫環境 這個是我以前寫的sql 你看一下,修改一下就可以了 oracle分組查詢用逗號分隔結果sql語句 表一 學號 姓名 1 張三 2 李四 3 王五 表二 學號...

ORACLE資料庫多行資料合併為1行的問題,急用

你看看是不是這樣的,你資料排版太混亂了 select csrq,qyph,pczl,wm concat jyxmmc wm concat jyz xydj,je from 表名 group by csrq,qyph,pczl,xydj,je 補充 oracle跟sqlserver不一樣,如果儲存過程...

在oracle中使用cursor合併多行資料

如果這兩行有個共同的其他列作為分組,標誌他們是同一組 比如姓名編號之類的,是可以group by後min出來的。select 姓名,min 引流管 as 引流管,min 化療 as 化療,min 放療 as 放療。from 記錄表。group by 姓名 如何將oracle中同一列的多行記錄拼接成一...