0

我的帖子

个人中心

设置

  发新话题
现有表A名为 tb1 内容如下:
学号     姓名      科目     分数      年级
1001     张三      语文      60        1年级
1001     张三      数学      30        1年级
1001     张三      英语      90        1年级

1001     张三      语文      66        2年级
1001     张三      数学      30        2年级


1002     李四      语文      70        1年级
1002     李四      数学      80        1年级
1002     李四      英语      50        1年级

1002     李四      语文      70        2年级
1002     李四      数学      80        2年级


1003     王五     语文      100       1年级
1003     王五      数学      90        1年级
1003     王五     英语       70        1年级

1003     王五     语文      100        2年级
1003     王五      数学      90         2年级

………………许多数据

现在请问怎么写SQL语句能够达到如下表B的样式tb2

学号      姓名    1年级总分数       2年级总分数
1001    张三         180                     96
1002    李四         200                     150
1003    王五         260                      190
…………………………………………



先按照年纪group by

然后在用pivot行转列就能得到你的结果。



给你提供一个最简单的思路,既然是一年级和二年级,那就先分开取出一年级和二年级的数据,然后按照学号和姓名group by,然后将两个表连接起来就可以了



行列转换再聚合, 可参考: http://www.cnblogs.com/seusoftware/p/3238022.html



我的51CTO博客

SQL Server MCITP, MVP, MCT, DBA
引用:
原帖由 seusoftware 于 2018-07-09 13:55 发表
行列转换再聚合, 可参考: http://www.cnblogs.com/seusoftware/p/3238022.html
行转列更切合




引用:
原帖由 dance3350 于 2018-6-16 21:10 发表
现有表A名为 tb1 内容如下:
学号     姓名      科目     分数      年级
1001     张三      语文      60        1年级
1001     张三      数学      30        1年级
1001     张三      英语      90        1 ...
写了一个测试的数据,思路楼上已经说出来了,根据学号和姓名分组得出总分,然后把的出来的数据放进一个临时表
然后再对临时表进行行列转换就可以得到你要的数据了



‹‹ 上一贴:握草,真不会了?没救了?数据库拿不出来了! ...   |   下一贴:【分享-- SQL SERVER 2005页面存储之--表的数据行在页 ... ››
  发新话题
快速回复主题
关于我们 | 诚聘英才 | 联系我们 | 网站大事 | 友情链接 |意见反馈 | 网站地图
Copyright©2005-2018 51CTO.COM
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系:bbs@51cto.com