求助!SQL对表中部分数据进行分组问题

shinichi_jtc 2013-12-29 10:37:03
求教各位大神啊!我想对表里的部分数据进行分组
例如:

--给个例子参考

CREATE TABLE StudentGrade(
stuId CHAR(4), --学号
subId INT, --课程号
grade INT, --成绩
PRIMARY KEY (stuId,subId)
)
GO
--表中数据如下
INSERT INTO StudentGrade(stuId,subId,grade) VALUES( '001 ',1,97);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES( '001 ',2,50);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES( '001 ',3,70);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES( '002 ',1,92);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES( '002 ',2,80);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES( '002 ',3,30);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES( '003 ',1,93);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES( '003 ',2,95);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES( '003 ',3,85);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES( '004 ',1,73);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES( '004 ',2,78);
INSERT INTO StudentGrade(stuId,subId,grade) VALUES( '004 ',3,87);
GO


这时,查询结果是:
stuId	subId	grade
001 1 97
001 2 50
001 3 70
002 1 92
002 2 80
002 3 30
003 1 93
003 2 95
003 3 85
004 1 73
004 2 78
004 3 87


现在我想对stuId=‘001’的grade进行求和,也就是要得到结果是:
stuId	subId	grade
001 0 217
002 1 92
002 2 80
002 3 30
003 1 93
003 2 95
003 3 85
004 1 73
004 2 78
004 3 87

而我由于实际情况数据量大,不想用union实现,想请教各位大神能在一个select语句中实现吗?
谢谢!情况紧急!在线等啊!
...全文
152 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shinichi_jtc 2013-12-29
  • 打赏
  • 举报
回复
引用 2 楼 OROCHIHeart 的回复:

select stuId,SUM(grade) as grade
from StudentGrade
group by stuId
order by stuId
哈哈!给你5分!
shinichi_jtc 2013-12-29
  • 打赏
  • 举报
回复
引用 楼主 shinichi_jtc 的回复:
求教各位大神啊!我想对表里的部分数据进行分组 例如:

--给个例子参考 

CREATE   TABLE   StudentGrade( 
stuId   CHAR(4),         --学号 
subId   INT,                 --课程号 
grade   INT,                 --成绩 
PRIMARY   KEY   (stuId,subId) 
) 
GO 
--表中数据如下 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '001 ',1,97); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '001 ',2,50); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '001 ',3,70); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '002 ',1,92); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '002 ',2,80); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '002 ',3,30); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '003 ',1,93); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '003 ',2,95); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '003 ',3,85); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '004 ',1,73); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '004 ',2,78); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '004 ',3,87); 
GO 
这时,查询结果是:
stuId	subId	grade
001 	1	97
001 	2	50
001 	3	70
002 	1	92
002 	2	80
002 	3	30
003 	1	93
003 	2	95
003 	3	85
004 	1	73
004 	2	78
004 	3	87
现在我想对stuId=‘001’的grade进行求和,也就是要得到结果是:
stuId	subId	grade
001 	0	217
002 	1	92
002 	2	80
002 	3	30
003 	1	93
003 	2	95
003 	3	85
004 	1	73
004 	2	78
004 	3	87
而我由于实际情况数据量大,不想用union实现,想请教各位大神能在一个select语句中实现吗? 谢谢!情况紧急!在线等啊!
感谢大神!茅塞顿开啊!
orochiheart 2013-12-29
  • 打赏
  • 举报
回复
理解错了 请无视2L
orochiheart 2013-12-29
  • 打赏
  • 举报
回复

select stuId,SUM(grade) as grade
from StudentGrade
group by stuId
order by stuId
  • 打赏
  • 举报
回复
这样吗:



--给个例子参考 

CREATE   TABLE   StudentGrade( 
stuId   CHAR(4),         --学号 
subId   INT,                 --课程号 
grade   INT,                 --成绩 
PRIMARY   KEY   (stuId,subId) 
) 
GO 
--表中数据如下 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '001 ',1,97); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '001 ',2,50); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '001 ',3,70); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '002 ',1,92); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '002 ',2,80); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '002 ',3,30); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '003 ',1,93); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '003 ',2,95); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '003 ',3,85); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '004 ',1,73); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '004 ',2,78); 
INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '004 ',3,87); 
GO 


select stuId,

       case when stuId = '001' 
                 then 0 
            else subId 
       end subId, 
       
       SUM(grade) as grade
from StudentGrade
group by stuId,
         case when stuId = '001' 
                 then 0 
            else subId 
         end
order by stuId
/*
stuId	subId	grade
001 	0	217
002 	1	92
002 	2	80
002 	3	30
003 	1	93
003 	2	95
003 	3	85
004 	1	73
004 	2	78
004 	3	87
*/
orochiheart 2013-12-29
  • 打赏
  • 举报
回复
引用 5 楼 shinichi_jtc 的回复:
[quote=引用 2 楼 OROCHIHeart 的回复:]

select stuId,SUM(grade) as grade
from StudentGrade
group by stuId
order by stuId
哈哈!给你5分![/quote]太感人了!

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧