Foxtable(狐表)用户栏目专家坐堂 → 请教如何用SQL文句转换表格。


  共有9640人关注过本帖树形打印复制链接

主题:请教如何用SQL文句转换表格。

帅哥哟,离线,有人找我吗?
admczy
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:11 积分:172 威望:0 精华:0 注册:2010/6/9 9:44:00
  发帖心情 Post By:2012/3/25 16:00:00 [显示全部帖子]

if not object_id('stuid') is null
    drop table stuid
Go
Create table stuid([学号] varchar(20),[科目] nvarchar(2),[成绩] int)
Insert stuid
select N'0101',N'语文',75 union all
select N'0102',N'语文',70 union all
select N'0103',N'语文',90 union all
select N'0101',N'数学',89 union all
select N'0102',N'数学',80 union all
select N'0103',N'数学',99 union all
select N'0101',N'英语',89 union all
select N'0102',N'英语',79 union all
select N'0103',N'英语',67
Go


select
    学号,
    语文= sum(case when 科目='语文' then 成绩 else 0 end),
    数学=sum(case when 科目='数学' then 成绩 else 0 end),
    英语=sum(case when 科目='英语' then 成绩 else 0 end),
    SUM(成绩) 总成绩  
from   stuid
group by 学号

学号 语文 数学 英语 总成绩
0101 75 89 89 253
0102 70 80 79 229
0103 90 99 67 256

 

declare @s nvarchar(4000)
Select  @s=isnull(@s+',','')+quotename([科目]) from stuid group by [科目]
exec('select [学号],'+@s+',[总成绩] from (select *,[总成绩]=sum([成绩])over(partition by [学号]) from stuid ) a
pivot (max([成绩]) for [科目] in('+@s+'))b ')

 

学号 数学 英语 语文 总成绩
0102 80 79 70 229
0101 89 89 75 253
0103 99 67 90 256

 


 


 回到顶部
帅哥哟,离线,有人找我吗?
admczy
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:11 积分:172 威望:0 精华:0 注册:2010/6/9 9:44:00
  发帖心情 Post By:2012/3/25 16:15:00 [显示全部帖子]

可以直接用交叉汇总,然后把总成绩做成表达式列.

Dim g As New CrossTableBuilder("统计表1", DataTables("stuid"))
g.HGroups.AddDef("学号")
g.VGroups.AddDef("科目")
g.Totals.AddDef("成绩", "成绩")
g.Build()
MainTable = Tables("统计表1")


 回到顶部