INSERT INTO 新表 (SELECT ID, '呼吸系統疾病' FROM 原表 WHERE 呼吸系統疾病有無 = 1 UNION SELECT ID, '消化系統疾病' FROM 原表 WHERE 消化系統疾病有無 = 1
網站建設哪家好,找成都創新互聯!專注于網頁設計、網站建設、微信開發、成都微信小程序、集團企業網站建設等服務項目。為回饋新老客戶創新互聯還提供了觀山湖免費建站歡迎大家使用!
UNION SELECT ID, '循環系統疾病' FROM 原表 WHERE 循環系統疾病有無 = 1)
如果使用行轉列,還得使用merge into,還不如上面的語句清晰。
可以使用wm_concat()函數;
下面是我做的一個例子,可以參考下,當然具體語法可以百度,也可以去官方文檔查:
SCOTT@ ysdb1show user
USER is "SCOTT"
SCOTT@ ysdb1create table test_concat(id number(5),name varchar2(10));
Table created.
SCOTT@ ysdb1insert into test_concat values(1,'a');
1 row created.
SCOTT@ ysdb1insert into test_concat values(1,'b');
1 row created.
SCOTT@ ysdb1insert into test_concat values(1,'c');
1 row created.
SCOTT@ ysdb1insert into test_concat values(2,'q');
1 row created.
SCOTT@ ysdb1insert into test_concat values(2,'w');
1 row created.
SCOTT@ ysdb1insert into test_concat values(2,'e');
1 row created.
SCOTT@ ysdb1insert into test_concat values(2,'f');
1 row created.
SCOTT@ ysdb1select * from test_concat;
ID NAME
---------- ----------
1 a
1 b
1 c
2 q
2 w
2 e
2 f
7 rows selected.
SCOTT@ ysdb1select wm_concat(name) from test_concat;
WM_CONCAT(NAME)
--------------------------------------------------------------------------------
a,b,c,q,w,e,f
SCOTT@ ysdb1select id,wm_concat(name) from test_concat group by id;
ID WM_CONCAT(NAME)
---------- --------------------------------------------------------------------------------
1 a,c,b
2 q,f,e,w
基本思路:對每班學生排序,根據序號構造列名,拼接動態sql
--測試數據
create?table
("學生"?varchar2(10)
,"學號"?varchar2(10)
,"班級"?varchar2(10)
);?
insert?into?"表A"?
select?'張三','100','一班'?from?dual?union?all
select?'李四','101','二班'?from?dual?union?all
select?'王五','102','一班'?from?dual?union?all
select?'趙六','103','三班'?from?dual?union?all
select?'李二','104','二班'?from?dual
--動態拼接Pivot??
declare
sqlstr?varchar2(8000):='';
begin
--構造類似于?'學號1','學號2',...??的字符串
for?x?in?(?????
select?distinct?row_number()?over?(partition?by?"班級"?order?by?"學號")?seq?
from?"表A"?order?by?seq?)?loop?
sqlstr?:=?sqlstr?||?','''?||?'學號'?||to_char(x.seq)||'''';?
end?loop;?
sqlstr:=substr(sqlstr,2,length(sqlstr)-1);
--將前面構造的字符串放入Pivot語句中
sqlstr:='
select?*?from?(
select?"學號","班級",?''學號''||?to_char(
row_number()?over?(partition?by?"班級"?order?by?"學號"))?seq??
from?"表A")?t
pivot(
max("學號")
for?seq?in?('||sqlstr||')??
)';
--dbms_output.put_line(sqlstr);
--將查詢結果放入臨時視圖中
sqlstr?:=?'CREATE?OR?REPLACE?VIEW?tmp_result??AS?'||?sqlstr;
--dbms_output.put_line(sqlstr);
execute?immediate?sqlstr;
end;
--查看結果
select?*?from?tmp_result;
結果如下:
當前標題:Oracle如何將列轉行 列轉行oracle方法
地址分享:http://m.newbst.com/article8/hjhoip.html
成都網站建設公司_創新互聯,為您提供網站設計、關鍵詞優化、網頁設計公司、動態網站、軟件開發、企業建站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯