我已做好一个视图a
编号,姓名,语文成绩,数学成绩
01 陈 20 30
02 王 50 80
我想做一个视图b
编号,姓名 语文成绩,数学成绩,合计
01 陈 20 30 50
02 王 50 80 130
合计 70 110
谢谢!
编号,姓名,语文成绩,数学成绩
01 陈 20 30
02 王 50 80
我想做一个视图b
编号,姓名 语文成绩,数学成绩,合计
01 陈 20 30 50
02 王 50 80 130
合计 70 110
谢谢!
as
select * , 合计 = 语文成绩 + 数学成绩 from 视图a
go
as
select * , 合计 = 语文成绩 + 数学成绩 from 视图a
union all
select 编号= '合计' , 姓名 = '' , sum(语文成绩) 语文成绩, sum(数学成绩) 数学成绩 , 合计 = 0 from 视图a
go
as
select *,合计=语文成绩+数学成 from tb
union all
select '合计','',sum(语文成绩),sum(数学成绩),sum(语文成绩+数学成) from tb
from 视图a
union all
select '合计',null,sum(语文成绩),sum(数学成绩),null
from 视图a
-- Author :fredrickhu(我是小F,向高手学习)
-- Date :2009-12-21 09:50:02
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([编号] varchar(2),[姓名] varchar(2),[语文成绩] int,[数学成绩] int)
insert [tb]
select '01','陈',20,30 union all
select '02','王',50,80
--------------开始查询--------------------------select
case when grouping(编号)=1 then '合计' else 编号 end as 编号,姓名,sum(语文成绩) as 语文成绩,sum(数学成绩) as 数学成绩--,语文成绩+数学成绩 as 合计
from
[tb]
group by
编号,姓名
with rollup
having
grouping(姓名)=0 or grouping(编号)=1
----------------结果----------------------------
/* 编号 姓名 语文成绩 数学成绩
---- ---- ----------- -----------
01 陈 20 30
02 王 50 80
合计 NULL 70 110(3 行受影响)*/
我已做好一个视图a
编号,姓名,班级, 语文成绩,数学成绩
01 陈 理科1班 20 NULL
02 王 理科1班 NULL 80
我想做一个视图b
编号,姓名,班级, 语文成绩, 数学成绩,合计
01 陈 理科1班 20 0 20
02 王 理科1班 0 80 80
合计 理科1班 20 80
谢谢!
from 视图a
union all
select '合计',null,班级,sum(语文成绩),sum(数学成绩),null
from 视图a
group by 班级
create view v_tb
as
select *,合计=LTRIM(语文成绩+数学成) from A
union all
select '合计','',sum(语文成绩),sum(数学成绩),'' from A
as
select *,合计=LTRIM(ISNULL(语文成绩,0)+ISNULL(数学成,0)) from A
union all
select '合计','',sum(ISNULL(语文成绩,0)),sum(ISNULL(数学成绩,0)),'' from A
as
select * , 合计 = isnull(语文成绩,0) + isnull(数学成绩,0) from 视图a
union all
select 编号= '合计' , 姓名 = '' , sum(语文成绩) 语文成绩, sum(数学成绩) 数学成绩 , 合计 = 0 from 视图a
go
-- Author :fredrickhu(我是小F,向高手学习)
-- Date :2009-12-21 09:50:02
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([编号] varchar(2),[姓名] varchar(2),[语文成绩] int,[数学成绩] int)
insert [tb]
select '01','陈',20,30 union all
select '02','王',50,80
--------------开始查询--------------------------select
case when grouping(编号)=1 then '合计' else 编号 end as 编号,姓名,sum(语文成绩) as 语文成绩,sum(数学成绩) as 数学成绩,sum(语文成绩+数学成绩) as 合计
from
[tb]
group by
编号,姓名
with rollup
having
grouping(姓名)=0 or grouping(编号)=1
----------------结果----------------------------
/*编号 姓名 语文成绩 数学成绩 合计
---- ---- ----------- ----------- -----------
01 陈 20 30 50
02 王 50 80 130
合计 NULL 70 110 180(3 行受影响)*/
[/code]
go
create table [tb]([编号] varchar(2),[姓名] varchar(2),[语文成绩] int,[数学成绩] int)
insert [tb]
select '01','陈',20,30 union all
select '02','王',50,80
--select * from tbselect
case when grouping(编号)=1 then '合计' else 编号 end as 编号,姓名,sum(语文成绩) as 语文成绩,sum(数学成绩) as 数学成绩,sum(语文成绩+数学成绩) as 合计
from
[tb]
group by
编号,姓名
with rollup
having
grouping(姓名)=0-----这里限定是明细数据 or
grouping(编号)=1 ------这里限定最后汇总
union all
select 编号='合计',姓名='',班级='理科1班',sum(语文成绩),sum(数学成绩),合计='' from a