当前位置:Gxlcms > 数据库问题 > sqlserver 纵横

sqlserver 纵横

时间:2021-07-01 10:21:17 帮助过:2人阅读

table Score ( Name nvarchar(128), Class nvarchar(128), score int ) insert into Score(Name, Class, score)values(张三,语文,98) insert into Score values(张三,语文,98) insert into Score values(张三,数学,89) insert into Score values(张三,物理,78) insert into Score values(李四,语文,79) insert into Score values(李四,数学,88) insert into Score values(李四,物理,100) select * from Score select t.Name, SUM(case t.Class when 语文 then t.score else 0 end) as 语文, SUM(case t.Class when 数学 then t.score else 0 end) as 数学, SUM(case t.Class when 物理 then t.score else 0 end) as 物理, SUM(case t.Class when 外语 then t.score else 0 end) as 外语, SUM(case t.Class when 政治 then t.score else 0 end) as 政治, SUM(case t.Class when 体育 then t.score else 0 end) as 体育 from Score as t group by t.Name

 

横表转纵表

-- 转换的表插入新表
select t.Name,
SUM(case t.Class when 语文 then t.score else 0 end) as 语文,
SUM(case t.Class when 数学 then t.score else 0 end) as 数学,
SUM(case t.Class when 物理 then t.score else 0 end) as 物理
into ScoreHb
from Score as t
group by t.Name

select * from dbo.ScoreHb

-- union all链接3个科目
select t.Name,
语文 as Class,
t.语文 as score
from ScoreHb as t
union all
select t.Name,
数学 as Class,
t.数学 as score
from ScoreHb as t
union all
select t.Name,
物理 as Class,
t.物理 as score
from ScoreHb as t
order by t.Name desc

 

pivot纵表转横表

select
    t2.Name,
    t2.数学,
    t2.物理,
    t2.语文
from Score as t1
pivot (sum(score) for Class in(数学,语文,物理)) as t2

unpivot 横表转纵表

 select
 *
from
ScoreHb
 unpivot (分数 for 课程 in (语文,数学,物理)) as t4

 

sqlserver 纵横

标签:

人气教程排行