我已做好一个视图a
编号,姓名,语文成绩,数学成绩  
01    陈     20        30
02    王     50        80
我想做一个视图b
编号,姓名   语文成绩,数学成绩,合计
01   陈      20        30      50
02   王      50        80      130
合计         70        110     
谢谢!

解决方案 »

  1.   

    create view my_view
    as
    select * , 合计 = 语文成绩 + 数学成绩 from 视图a 
    go
      

  2.   

    create view my_view 
    as 
    select * , 合计 = 语文成绩 + 数学成绩 from 视图a 
    union all
    select 编号= '合计' , 姓名 = '' , sum(语文成绩) 语文成绩, sum(数学成绩) 数学成绩 , 合计 = 0 from 视图a
    go
      

  3.   

    create view v_tb
    as
    select *,合计=语文成绩+数学成 from tb
    union all
    select '合计','',sum(语文成绩),sum(数学成绩),sum(语文成绩+数学成) from tb
      

  4.   

    select 编号,姓名,语文成绩,数学成绩,语文成绩+数学成绩 as 合计
    from 视图a
    union all
    select '合计',null,sum(语文成绩),sum(数学成绩),null
    from 视图a
      

  5.   

    ----------------------------------------------------------------
    -- 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 行受影响)*/
      

  6.   

    如果是这样的呢?
    我已做好一个视图a 
    编号,姓名,班级,       语文成绩,数学成绩  
    01    陈   理科1班      20        NULL 
    02    王   理科1班      NULL        80 
    我想做一个视图b 
    编号,姓名,班级,        语文成绩, 数学成绩,合计 
    01  陈    理科1班      20        0      20
    02  王    理科1班      0        80      80 
    合计       理科1班      20        80    
    谢谢!
      

  7.   

    select 编号,姓名,班级,语文成绩,数学成绩,语文成绩+数学成绩 as 合计
    from 视图a
    union all
    select '合计',null,班级,sum(语文成绩),sum(数学成绩),null
    from 视图a
    group by 班级
      

  8.   

     isnull( 数学成绩 ,1)
      

  9.   


    create view v_tb
    as
    select *,合计=LTRIM(语文成绩+数学成) from A
    union all
    select '合计','',sum(语文成绩),sum(数学成绩),'' from A
      

  10.   

    create view v_tb
    as
    select *,合计=LTRIM(ISNULL(语文成绩,0)+ISNULL(数学成,0)) from A
    union all
    select '合计','',sum(ISNULL(语文成绩,0)),sum(ISNULL(数学成绩,0)),'' from A
      

  11.   

    create view my_view 
    as 
    select * , 合计 = isnull(语文成绩,0) + isnull(数学成绩,0) from 视图a 
    union all
    select 编号= '合计' , 姓名 = '' , sum(语文成绩) 语文成绩, sum(数学成绩) 数学成绩 , 合计 = 0 from 视图a
    go
      

  12.   

    [code=SQL]----------------------------------------------------------------
    -- 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]
      

  13.   

    向小F学习,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 * 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 ------这里限定最后汇总
      

  14.   

    select 编号,姓名,班级,语文成绩, 数学成绩,(语文成绩+数学成绩) as 合计 from a
    union all 
    select 编号='合计',姓名='',班级='理科1班',sum(语文成绩),sum(数学成绩),合计='' from a