sql server 行列轉換
程式碼
-----------建立產品產量表
create table tb2(年份 varchar(10) , 產品 varchar(10) , 產量 int)
insert into tb2 values('2009' , '毛巾' , 74)
insert into tb2 values('2009' , '西裝' , 83)
insert into tb2 values('2009' , '皮鞋' , 93)
insert into tb2 values('2008' , '西褲' , 74)
insert into tb2 values('2008' , 'T恤' , 84)
insert into tb2 values('2008' , '皮鞋' , 94)
go
---------建立學生成績表
create table tb(姓名 varchar(10) , 課程 varchar(10) , 分數 int)
insert into tb values('張三' , '語文' , 74)
insert into tb values('張三' , '數學' , 83)
insert into tb values('張三' , '物理' , 93)
insert into tb values('李四' , '語文' , 74)
insert into tb values('李四' , '數學' , 84)
insert into tb values('李四' , '物理' , 94)
go
--------普通轉換
select 姓名 as 姓名 ,
max(case 課程 when '語文' then 分數 else 0 end) 語文,
max(case 課程 when '數學' then 分數 else 0 end) 數學,
max(case 課程 when '物理' then 分數 else 0 end) 物理
from tb
group by 姓名
---動態sql語句轉換
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 課程 when ''' + 課程 + ''' then 分數 else 0 end) [' + 課程 + ']'
from (select distinct 課程 from tb) as a
set @sql = @sql + ' from tb group by 姓名'
exec(@sql)
SELECT * FROM tb
SELECT * FROM tb2
select 產品 as 產品,
max(case 年份 when '2009' then 產量 else 0 end) '2009'
from tb2
group by 產品
declare @sql varchar(8000)
declare @thisyear varchar(20)
declare @yesteryear varchar(20)
declare @yyesteryear varchar(20)
set @thisyear = DATEPART (year,getdate())
set @yesteryear =(DATEPART (year,getdate())-1)
set @yyesteryear = (DATEPART (year,getdate())-2)
set @sql='select 產品 as 產品'
set @sql = @sql+',case 年份 when '''+@thisyear+''' then 產量 else 0 end['+'this'+']'
set @sql = @sql+',case 年份 when '''+@yesteryear+''' then 產量 else 0 end['+@yesteryear+']'
set @sql = @sql+',case 年份 when '''+@yyesteryear+''' then 產量 else 0 end ['+@yyesteryear+']'
select @sql=@sql
from (select 年份 as b from tb2) as a
set @sql = @sql +'from tb2 group by 產品,年份,產量'
exec(@sql)
-----------建立產品產量表
create table tb2(年份 varchar(10) , 產品 varchar(10) , 產量 int)
insert into tb2 values('2009' , '毛巾' , 74)
insert into tb2 values('2009' , '西裝' , 83)
insert into tb2 values('2009' , '皮鞋' , 93)
insert into tb2 values('2008' , '西褲' , 74)
insert into tb2 values('2008' , 'T恤' , 84)
insert into tb2 values('2008' , '皮鞋' , 94)
go
---------建立學生成績表
create table tb(姓名 varchar(10) , 課程 varchar(10) , 分數 int)
insert into tb values('張三' , '語文' , 74)
insert into tb values('張三' , '數學' , 83)
insert into tb values('張三' , '物理' , 93)
insert into tb values('李四' , '語文' , 74)
insert into tb values('李四' , '數學' , 84)
insert into tb values('李四' , '物理' , 94)
go
--------普通轉換
select 姓名 as 姓名 ,
max(case 課程 when '語文' then 分數 else 0 end) 語文,
max(case 課程 when '數學' then 分數 else 0 end) 數學,
max(case 課程 when '物理' then 分數 else 0 end) 物理
from tb
group by 姓名
---動態sql語句轉換
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 課程 when ''' + 課程 + ''' then 分數 else 0 end) [' + 課程 + ']'
from (select distinct 課程 from tb) as a
set @sql = @sql + ' from tb group by 姓名'
exec(@sql)
SELECT * FROM tb
SELECT * FROM tb2
select 產品 as 產品,
max(case 年份 when '2009' then 產量 else 0 end) '2009'
from tb2
group by 產品
declare @sql varchar(8000)
declare @thisyear varchar(20)
declare @yesteryear varchar(20)
declare @yyesteryear varchar(20)
set @thisyear = DATEPART (year,getdate())
set @yesteryear =(DATEPART (year,getdate())-1)
set @yyesteryear = (DATEPART (year,getdate())-2)
set @sql='select 產品 as 產品'
set @sql = @sql+',case 年份 when '''+@thisyear+''' then 產量 else 0 end['+'this'+']'
set @sql = @sql+',case 年份 when '''+@yesteryear+''' then 產量 else 0 end['+@yesteryear+']'
set @sql = @sql+',case 年份 when '''+@yyesteryear+''' then 產量 else 0 end ['+@yyesteryear+']'
select @sql=@sql
from (select 年份 as b from tb2) as a
set @sql = @sql +'from tb2 group by 產品,年份,產量'
exec(@sql)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-622493/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sql server行列轉換案例SQLServer
- SQL Server中行列轉換 Pivot UnPivotSQLServer
- 行列轉換sqlSQL
- SQL Server 實現行列(縱橫表)轉換SQLServer
- SQL Server 2005之PIVOT/UNPIVOT行列轉換(轉)SQLServer
- 【SQL 學習】行列轉換SQL
- 【SQL】行列轉換方法示例SQL
- oracle11g pivot 行列轉換 SQL Server 2005OracleSQLServer
- 在SQL Server 2005中實現表的行列轉換SQLServer
- sql 實現表的行列轉換SQL
- Oracle--SQL行列轉換實戰OracleSQL
- 行列轉換
- Kettle行列轉換
- 偽行列轉換!
- 【SQL 分析函式】wm_concat 行列轉換SQL函式
- 行列轉換 交叉表 (轉)
- sql server型別轉換SQLServer型別
- SQL Server 2005下的行列轉化(簡單)SQLServer
- Oracle-行列轉換Oracle
- MySQL行列轉換拼接MySql
- 行列轉換之大全~~~
- oracle行列轉換-多行轉換成字串Oracle字串
- 行列轉換,列行轉換統計
- oracle行列轉換-行轉列Oracle
- oracle行列轉換-列轉行Oracle
- mysql行列轉換詳解MySql
- Oracle 行列轉換 經典Oracle
- Oracle 行列轉換總結Oracle
- Oracle 行列轉換小結Oracle
- Oracle行列轉換總結Oracle
- Shell練習 行列轉換
- 複雜的行列轉換
- oracle行列轉換-字串轉換成多列Oracle字串
- oracle行列轉換-多列轉換成字串Oracle字串
- 記錄一個行列轉換
- 通用的行列轉換的方法
- 行列轉換問題總結
- oracle和mysql的行列轉換OracleMySql