SQL中的行列转换
sql吧
全部回复
仅看楼主
level 3
leilei2010213 楼主
--建表
create table [Scores]
(
[ID] int identity(1,1) primary key,
[Student] varchar(20) ,
[Subject] varchar(30),
[Score] float
)
--插入记录
insert into Scores(Student,Subject,Score) values('张三','语文','90')
--行列互换
/*
pivot(
  聚合函数(要转成列值的列名)
  for 要转换的列
  in(目标列名)
  )
*/
select Student as '姓名',
avg(语文) as '语文',
avg(英语) as '英语',
avg(数学) as '数学'
from Scores
pivot(
avg(Score) for Subject
in (语文,英语,数学)
)as NewScores
group by Student
order by Student asc
2021年04月27日 10点04分 1
level 8
in (语文,英语,数学) 这个建议写成 in ([语文],[英语],[数学])
而且pivot只合适转1个数值型的值,如果遇到多个不定的字段。则需要写动态SQL用
FORXML PATH获取字段,并通过游标轮询构建SQL。
反过来如果需求行转列字符串则需要创建临时表枚举之。
2021年05月06日 02点05分 2
level 8
譬如这个帮某电商平台做的统计退换货数量报表。栏位是根据实际情况自己动增减的。一个动态SQL就能解除以后的维护问题了。并且还是多层轮询机制。以后增加新项目类型也能自动新增。
2021年05月06日 02点05分 3
1