/*一:列轉行,下面是轉換之前與之後的截圖對比第一步:建立臨時表結構
*/create table #student --建立臨時表
( stuname nvarchar(20), --學生名稱
chinese int,
math int,
english int
)drop table #student --刪除臨時表
select * from #student --查詢所有資料
insert into #student(stuname,chinese,math,english) values('張三',70,86,96);
insert into #student(stuname,chinese,math,english) values('李四',49,85,86);
insert into #student(stuname,chinese,math,english) values('王五',59,58,90);
insert into #student(stuname,chinese,math,english) values('趙六',68,79,80);
方法一:使用 union all 拼接多個結果集
select * from (select stuname,課程='語文',分數=chinese from #student
union all
select stuname,課程='數學',分數=math from #student
union all
select stuname,課程='英語',分數=english from #student
)as te
order by te.stuname asc
select *會有動態的情況,但是在處理列轉行的情況時,一般每個資料庫在進行資料儲存的時候,列有多少個,都是已經確定的,不存在不確定性,from #student
unpivot (分數 for 課程 in([chinese],math,english)) t
所以,第三種方法知道就可以了,實用性不大,不推薦此方法。
declare @sql nvarchar(4000)注意:上面的這一部分,由於查詢了syscolumns 資料庫內建系統表,我演示的資料是臨時表,是查不到任何資料的,必須建立實際的資料庫表才可以使用。select @sql=isnull(@sql+',','')+quotename(name)
from syscolumns
where id=object_id('student')
and name not in('stuname') --不顯示學生名稱列
order by colid
--print @sql
set @sql='
select *
from #student
unpivot (分數 for 課程 in('+@sql+')) t
'exec(@sql)
/*一:列轉行,下面是轉換之前與之後的截圖對比第一步:建立臨時表結構
*/create table #student --建立臨時表
( stuname nvarchar(20), --學生名稱
chinese int,
math int,
english int
)drop table #student --刪除臨時表
select * from #student --查詢所有資料
insert into #student(stuname,chinese,math,english) values('張三',70,86,96);
insert into #student(stuname,chinese,math,english) values('李四',49,85,86);
insert into #student(stuname,chinese,math,english) values('王五',59,58,90);
insert into #student(stuname,chinese,math,english) values('趙六',68,79,80);
方法一:使用 union all 拼接多個結果集
select * from (select stuname,課程='語文',分數=chinese from #student
union all
select stuname,課程='數學',分數=math from #student
union all
select stuname,課程='英語',分數=english from #student
)as te
order by te.stuname asc
select *會有動態的情況,但是在處理列轉行的情況時,一般每個資料庫在進行資料儲存的時候,列有多少個,都是已經確定的,不存在不確定性,from #student
unpivot (分數 for 課程 in([chinese],math,english)) t
所以,第三種方法知道就可以了,實用性不大,不推薦此方法。
declare @sql nvarchar(4000)注意:上面的這一部分,由於查詢了syscolumns 資料庫內建系統表,我演示的資料是臨時表,是查不到任何資料的,必須建立實際的資料庫表才可以使用。select @sql=isnull(@sql+',','')+quotename(name)
from syscolumns
where id=object_id('student')
and name not in('stuname') --不顯示學生名稱列
order by colid
--print @sql
set @sql='
select *
from #student
unpivot (分數 for 課程 in('+@sql+')) t
'exec(@sql)
Oracle 資料轉sql server資料
首先使用oracle deverloper,在編輯裡面的dll獲取建立表結構 複製到sql中列名是我們需要的,列的型別是sql不認得,所以我們需要把型別做下轉換 然後執行建立就好了 第二步是把匯出得資料放到sql中,右鍵匯出資料就好了,先換使用者名稱然後時間,時間需要注意to date 03 9月 ...
sqlServer 行列轉換之多行轉一行
記得在剛進專案組時候,使用oracle資料庫,遇到的第乙個難題就是行列轉換,哈哈,真是菜的一bi,現在使用sqlserver資料庫,又遇到了,記錄一下,以備後用和幫助後來者。言歸正傳 資料庫 sqlserver2008r2 英文版 1.建表 學生表 姓名,學科,成績 create table tes...
mysql中將一行轉化為多行資料
之前在網上搜尋了很多關於這個問題的解答方式,基本都是使用substring index和mysql.help topic搭配使用,方法沒錯,但是使用後發現執行時間太長,因此就放棄使用網上推薦的方法。可以使用substring index和union all搭配使用 圖1 圖2 將圖1變為圖2,可以這...