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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql行列轉換詳解MySql
- 記錄一個行列轉換
- sql server 資料型別轉換函式SQLServer資料型別函式
- SQL Server 替換SQLServer
- SQL SERVER 日期格式化、日期和字串轉換SQLServer字串
- Oracle行列轉換及pivot子句的用法Oracle
- Spark實現行列轉換pivot和unpivotSpark
- SQL 如何實現動態的行列轉置SQL
- Restcloud ETl實踐之資料行列轉換RESTCloud
- SQL Server中datetimeset轉換datetime型別問題淺析SQLServer型別
- 使用vue實現行列轉換的一種方法。Vue
- SQL Server中提前找到隱式轉換提升效能的辦法SQLServer
- [轉帖]見識一下SQL Server隱式轉換處理的不同SQLServer
- sql隱式轉換SQL
- SQL Server資料庫基礎之行資料轉換為列資料SQLServer資料庫
- 例項詳解構建數倉中的行列轉換
- SQL Server資料庫中的資料型別隱式轉換問題SQLServer資料庫資料型別
- 在報表中錄入資料時如何實現行列轉換
- Lambda 轉換 SQL ORM 工具 SqlRepoExSQLORM
- DataGear 變更部署資料庫為SQL Server填坑指南(含轉寫後的SQL server程式碼及SQL server配置檔案)資料庫SQLServer
- Oracle SQL_ID轉換成SQL_HASH_VALUEOracleSQL
- sql serverSQLServer
- 【SQL】Oracle查詢轉換之 OR用法SQLOracle
- SQL Server 匯出Excel有換行的解決方法SQLServerExcel
- SQL Server 2008的故障轉移叢集概述UBSQLServer
- 報表如何實現行列互換效果?
- Moebius for SQL ServerSQLServer
- sql server 使用SQLServer
- SQL Server教程SQLServer
- flink將bathch dataset 轉換為sql操作BATSQL
- transqlate:將任何SQL轉換為PostgreSQL方言SQL
- Spark SQL中的RDD與DataFrame轉換SparkSQL
- 實現二維陣列的行列互換陣列
- excel列轉行怎麼做 excel如何轉置行列Excel
- 日期與字串的互相轉換SQL語句字串SQL
- Oracle_SQL部分_時間轉換(案例一)OracleSQL
- 將 SQL轉換成 Laravel Query Builder 程式碼SQLLaravelUI
- 【SQL】Oracle查詢轉換之謂詞推送SQLOracle
- T-SQL——將字串轉換為多列SQL字串