有下面一张表结构与数据,想得到后面的查询结果,这个SQL如何写?谢谢姓名 课目 成绩
张三 语文 86
张三 英语 85
李四 语文 65
张三 数学 80
李四 数学 78
李四 英语 80
得到结果如下,即分组并且有合计:张三 语文 86
张三 数学 80
张三 英语 85
合计 251
李四 语文 65
李四 数学 78
李四 英语 80
合计 223
张三 语文 86
张三 英语 85
李四 语文 65
张三 数学 80
李四 数学 78
李四 英语 80
得到结果如下,即分组并且有合计:张三 语文 86
张三 数学 80
张三 英语 85
合计 251
李四 语文 65
李四 数学 78
李四 英语 80
合计 223
解决方案 »
- combobox 下来菜单中能自动滤去相同的内容吗?
- Delphi如何 用Image显示图片大小是固定的。。而且能看到全图
- INdy控件进行TCPIP程序测试的时候,发现发送的字符串结尾都包含一个二进制的0D,字符
- 那位能给出后台是access2000的二进制数据存储?
- ADO怎麼有這個問題!大家進來看看,謝謝!
- 请问tchart或dbchart如何填入资料
- 给动态生成的控件添加事件的问题,急!!
- 请问大家数据库实际开发
- 中专生怎么啦?我自认一点都不比大学生差,可投了几十份简历,都石沉大海!
- 掌上电脑可以运行我自己的DELPHI程序吗?
- 谁能编个简易计算器,10.1-10=0.1也没问题的
- (详细+说明+源码)热血传奇中周围有怪时如何使寻路终止?(目前需要鼠标点击一下))
union all
select 姓名,'合计',sum(成绩) from table group by 姓名
这样是否可以?
go
update table_1 set ls=姓名
go
insert into table_1(姓名,科目,成绩,ls) (select null, '合计',sum(成绩),姓名 from table_1 group by 姓名)
go
select 姓名,科目,成绩 from table_1 order by ls,成绩
union all
select 姓名,'合计',sum(成绩) from table_1 group by 姓名)as a order by 姓名,成绩
有个GROUPING,你自己搜索下,挺强悍的
SELECT CASE WHEN (GROUPING([姓名]) = 1) THEN ''
ELSE ISNULL('', 'UNKNOWN')
END AS [姓名],
CASE WHEN (GROUPING([课目]) = 1) THEN ''
ELSE ISNULL('总计', 'UNKNOWN')
END AS [课目],
SUM([成绩]) AS [成绩]
FROM T_Table1
GROUP BY [姓名],[课目] WITH ROLLUP
CREATE TABLE [T]
(
姓名 VARCHAR(10),
课目 VARCHAR(10),
成绩 INT
);
GO
INSERT INTO [T]
SELECT '张三', '语文', 86 UNION ALL
SELECT '张三', '英语', 85 UNION ALL
SELECT '李四', '语文', 65 UNION ALL
SELECT '张三', '数学', 80 UNION ALL
SELECT '李四', '数学', 78 UNION ALL
SELECT '李四', '英语', 80SELECT CASE WHEN A.课目='' THEN '合计' ELSE A.姓名 END AS 姓名,
课目,成绩 FROM ( SELECT TOP 100 PERCENT * FROM
(
SELECT 姓名,课目,成绩 FROM T
UNION ALL
SELECT A.姓名 ,'' 课目 ,A.成绩 FROM (SELECT 姓名,SUM(成绩) 成绩 FROM T GROUP BY 姓名) A) A
ORDER BY 姓名 ,课目 DESC
) A
/*
姓名 课目 成绩
---------- ---------- -----------
李四 语文 65
李四 英语 80
李四 数学 78
合计 223
张三 语文 86
张三 英语 85
张三 数学 80
合计 251(所影响的行数为 8 行)
*/
ELSE ISNULL('', 'UNKNOWN')
END AS [姓名],
CASE WHEN (GROUPING([课目]) = 1) THEN ''
ELSE ISNULL('总计', 'UNKNOWN')
END AS [课目],
SUM([成绩]) AS [成绩]
FROM T_Table1
GROUP BY [姓名],[课目] WITH ROLLUP
--借楼上数据一用
CREATE TABLE [T]
(
姓名 VARCHAR(10),
课目 VARCHAR(10),
成绩 INT
);
GO
INSERT INTO [T]
SELECT '张三', '语文', 86 UNION ALL
SELECT '张三', '英语', 85 UNION ALL
SELECT '李四', '语文', 65 UNION ALL
SELECT '张三', '数学', 80 UNION ALL
SELECT '李四', '数学', 78 UNION ALL
SELECT '李四', '英语', 80
SELECT 姓名,课目,成绩
FROM t
ORDER BY 姓名
COMPUTE SUM(成绩) BY 姓名/*
姓名 课目 成绩
---------- ---------- -----------
李四 语文 65
李四 数学 78
李四 英语 80 sum
===========
223
姓名 课目 成绩
---------- ---------- -----------
张三 数学 80
张三 语文 86
张三 英语 85 sum
===========
251
(所影响的行数为 8 行)*/
课目,成绩 FROM ( SELECT TOP 100 PERCENT * FROM
(
SELECT 姓名,课目,成绩 FROM T
UNION ALL
SELECT A.姓名 ,'' 课目 ,A.成绩 FROM (SELECT 姓名,SUM(成绩) 成绩 FROM T GROUP BY 姓名) A) A
ORDER BY 姓名 ,课目 DESC
) A