pivot 和unpivot用法一目了然


if  object_id( ' tb ') is  not  null 
drop  table tb
go

create  table tb(
    Name  varchar( 10),
    Course  varchar( 10),
    Score  int
)
go

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  *  from tb
go

-- Old Way
select 
    Name, 
     MAXcase Course  when  ' 语文 '  then Score  else  0  endas 语文,
     MAXcase Course  when  ' 数学 '  then Score  else  0  endas 数学,
     MAXcase Course  when  ' 物理 '  then Score  else  0  endas 物理    
from tb
group  by Name

go

-- PIVOT
select  *  from tb 
pivot(
     max(Score)  for Course  in( [ 语文 ], [ 数学 ], [ 物理 ])
    ) pivotedTb 
order  by Name
go

-- UNPIVOT
select  *  from 
(
     select  *  from tb 
    pivot(
         max(Score)  for Course  in( [ 语文 ], [ 数学 ], [ 物理 ])
    ) pivotedTb 
    
) sourceTb

unpivot(
    Score  for Course  in( [ 语文 ], [ 数学 ], [ 物理 ])
) unPivotedTb

简单演示了一下SQL Server2005 中的一对很有用的操作:PIVOT ,UNPIVOT

代码如下: 

 

 

if  object_id( ' tb ') is  not  null 
drop  table tb
go

create  table tb(
    Name  varchar( 10),
    Course  varchar( 10),
    Score  int
)
go

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  *  from tb
go

--Old Wayselect 
    Name, 
    MAXcase Course when '语文' then Score else 0 endas 语文,
    MAXcase Course when '数学' then Score else 0 endas 数学,
    MAXcase Course when '物理' then Score else 0 endas 物理    
from tb
group by Name

go

--PIVOT
select * from tb 
pivot(
    max(Score) for Course in([语文],[数学],[物理])
    ) pivotedTb 

order by Name
go

--UNPIVOT
select * from 
(
    select * from tb 
    pivot(
        max(Score) for Course in([语文],[数学],[物理])
    ) pivotedTb 
    
sourceTb

unpivot(
    Score for Course in([语文],[数学],[物理])
) unPivotedTb

go 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM