SQL表行列转换(求助)(100)

  • 主题发起人 主题发起人 YYGYTING
  • 开始时间 开始时间
Y

YYGYTING

Unregistered / Unconfirmed
GUEST, unregistred user!
表内容如下:姓名 科目 分数张三 地理 40李四 化学 50李四 生物 60想得出如下结果:科目 张三 李四地理 40 0化学 0 50生物 0 60谢谢
 
问题的关键是:1、你是否要保存成数据表;2、你要在哪里显示结果;不过不管你要如何,最基本的方法就是循环遍历你的前一个表,同时处理数据。
 
用case就行了,你查一下吧.
 
建议存储还是这样存储,打印时可以打印交叉报表,很多报表控件都支持这种报表实在不行,向Excel循环输出,再不行,建一张临时表,再写总之,无法写一句sql得到
 
如果是SQL数据库的话,写一个存储过程,用sunnyfairy说的那样,用Case就行了
 
select [姓名], max(case [科目] when '地理' then [分数] else 0 end) [语文], max(case [科目] when '化学' then [分数] else 0 end) [数学], max(case [科目] when '生物' then [分数] else 0 end) [物理]from [表名]group by [姓名]
 
create table ##t_a(xm varchar(10),km varchar(10),fs int)insert ##t_a values('张三','地理',40)insert ##t_a values('李四','化学',50)insert ##t_a values('李四','生物',60)select * from ##t_adeclare @str varchar(4000)set @str='select km 科目'select @str=@str+',sum(case xm when '''+xm+''' then fs else 0 end) '+xm from (select distinct xm from ##t_a) as aset @str=@str+' from ##t_a group by km'print(@str)exec(@str)
 
后退
顶部