求一个简单的sql,急!!
用一个sql语句写,合计T1各班的数学和语文的总分形成表t2
表T1
班级 姓名 数学 语文
---------------------------------------------
01 a1 80 70
02 a2 70 80
01 b1 75 30
03 b2 90 90
01 ca 90 50
02 cs 80 90
表T2
班级 姓名 数学 语文
---------------------------------------------
01 小计 245 150
01 a1 80 70
01 b1 75 30
01 ca 90 50
02 小计 150 170
02 a2 70 80
02 cs 80 90
03 小计 90 90
03 b2 90 90
合计 485 410
问题点数:60、回复次数:8Top
1 楼zjcxc(邹建)回复于 2005-04-01 20:47:04 得分 50
--测试数据
create table T1(班级 varchar(10),姓名 varchar(10),数学 int,语文 int)
insert T1 select '01','a1',80,70
union all select '02','a2',70,80
union all select '01','b1',75,30
union all select '03','b2',90,90
union all select '01','ca',90,50
union all select '02','cs',80,90
go
--查询
select 班级=case when grouping(班级)=1 then '' else 班级 end
,姓名=case
when grouping(班级)=1 then '合计'
when grouping(姓名)=1 then '小计'
else 姓名 end
,数学=sum(数学)
,语文=sum(语文)
from T1
group by 班级,姓名 with rollup
order by grouping(班级),班级,grouping(姓名) desc
go
--删除测试
drop table T1
/*--结果
班级 姓名 数学 语文
---------- ---------- ----------- -----------
01 小计 245 150
01 a1 80 70
01 b1 75 30
01 ca 90 50
02 小计 150 170
02 a2 70 80
02 cs 80 90
03 小计 90 90
03 b2 90 90
合计 485 410
(所影响的行数为 10 行)
--*/Top
2 楼frankwong(黄梓钿)回复于 2005-04-01 22:34:40 得分 0
收藏Top
3 楼chiwei(水手)回复于 2005-04-01 23:42:51 得分 0
markTop
4 楼nike_ljq(好好赚钱)回复于 2005-04-01 23:43:25 得分 0
upTop
5 楼boycq(池木)回复于 2005-04-01 23:53:58 得分 0
问一下哈
grouping(班级)=1 是什么意思Top
6 楼gzhughie(hughie)回复于 2005-04-02 00:34:47 得分 0
下面的语句可能会满足你的要求,只不过结果级会有点出入,结果是这样的:
班级 姓名 数学 语文
---------- ---------- ----------- -----------
01 a1 80 70
01 b1 75 30
01 ca 90 50
01 小计 245 150
02 a2 70 80
02 cs 80 90
02 小计 150 170
03 b2 90 90
03 小计 90 90
合计 485 410
不知道你觉得这样是不是更合理?
语句是:
SELECT CASE WHEN (GROUPING(班名) = 1) THEN ''
ELSE ISNULL(班名, 'UNKNOWN')
END AS Item,
CASE WHEN (GROUPING(姓名) = 1) THEN '小计'
ELSE ISNULL(姓名, 'UNKNOWN')
END AS Color,
SUM(数学) AS 数学,
SUM(语文) AS 语文
FROM T1
GROUP BY 班名, 姓名 WITH ROLLUP
Top
7 楼gzhughie(hughie)回复于 2005-04-02 00:36:26 得分 5
呵呵,有点小问题
下面的语句可能会满足你的要求,只不过结果级会有点出入,结果是这样的:
班级 姓名 数学 语文
---------- ---------- ----------- -----------
01 a1 80 70
01 b1 75 30
01 ca 90 50
01 小计 245 150
02 a2 70 80
02 cs 80 90
02 小计 150 170
03 b2 90 90
03 小计 90 90
合计 485 410
不知道你觉得这样是不是更合理?
语句是:
SELECT CASE WHEN (GROUPING(班名) = 1) THEN ''
ELSE ISNULL(班名, 'UNKNOWN')
END AS 班名,
CASE WHEN (GROUPING(姓名) = 1) THEN '小计'
ELSE ISNULL(姓名, 'UNKNOWN')
END AS 姓名,
SUM(数学) AS 数学,
SUM(语文) AS 语文
FROM T1
GROUP BY 班名, 姓名 WITH ROLLUPTop
8 楼ningmeng3000(柠檬)回复于 2005-04-02 10:01:25 得分 5
楼上的,你这个可能简一些,但也有错阿,也不符合楼主的要求.
还是一楼的好
不信你可以拿回去试一下.应该这样才对
SELECT CASE WHEN (GROUPING(班级) = 1) THEN ''
ELSE ISNULL(班级, 'UNKNOWN')
END AS 班级,
CASE WHEN (GROUPING(姓名) = 1) THEN '小计'
ELSE ISNULL(姓名, 'UNKNOWN')
END AS 姓名,
SUM(数学) AS 数学
,SUM(语文) AS 语文
FROM T1
GROUP BY 班级, 姓名 WITH ROLLUP
Top




