table     c1    c2    c3
         姓名   部门  工资
----------------------------
         aa     生产   1000
         aa     生产   1200
         bb     生产   1300
         bb     生产   1500
现在求用一句SQL语句求出以下形式        aa    生产    1000
        aa    生产    1200
   合计               2200
        bb    生产    1300
        bb    生产    1500
   合计               2800别人问的,看的我郁闷,高手看看能实现吗

解决方案 »

  1.   

    不是吧,姓名的字段是“合计”,部门的字段是空,这样好么?
    就算加进去了,如果有簇索引的话,以后再打开“合计”就应该都跑到一起去了吧
    建议用excel做,实在没办法要用的时候再导入好了
      

  2.   

    --看看這種效果能不能接受--建立測試環境
    Create Table TEST
    (c1 Varchar(10),
     c2 Nvarchar(10),
     c3 Int)
    --插入數據
    Insert TEST Select         'aa',     N'生产',   1000
    Union All Select          'aa',     N'生产',   1200
    Union All Select          'bb',     N'生产',   1300
    Union All Select          'bb',     N'生产',   1500
    --測試
    Select 
    c1,
    c2,
    c3 
    from TEST
    Union All
    Select 
    c1+N'合計',
    '',
    SUM(c3) from TEST
    Group By c1,c2
    Order By c1
    --刪除測試環境
    Drop Table TEST
    --結果
    /*
    c1 c2 c3
    aa 生产 1000
    aa 生产 1200
    aa合計          2200
    bb 生产 1300
    bb 生产 1500
    bb合計      2800
    */
      

  3.   

    现在求用一句SQL语句求出以下形式
      

  4.   

    wangzhenxing(fireice) ( ) 信誉:100  2006-04-28 11:16:00  得分: 0  
     
     
       现在求用一句SQL语句求出以下形式
      
     
    ---------------------------------------
    這是一條語句啊。
      

  5.   

    select c1=case when c2='' then '合计' else c1 end ,c2,c3 from (
    select * from table
    union
    select c1+'合计','' c2,sum(c3) c3 from table
    group by c1 
    )a
      

  6.   

    支持paoluo(一天到晚游泳的鱼) 的方法
    如果記錄多了andy1995(拓狼(一一)) 的方法可能就忙不過來了
      

  7.   

    同意paoluo。不知道能不能用rollup做
      

  8.   

    Select 
    c1,
    c2,
    c3 
    from TEST
    Union All
    Select 
    c1+N'合計',
    '',
    SUM(c3) from TEST
    Group By c1,c2
    Order By c1
      

  9.   

    试试Create Table TEST
    (c1 Varchar(10),
     c2 Nvarchar(10),
     c3 Int)
    --插入數據
    Insert TEST Select         'aa',     N'生产',   1000
    Union All Select          'aa',     N'生产',   1200
    Union All Select          'bb',     N'生产',   1300
    Union All Select          'bb',     N'生产',   1500select c1,c2=case when grouping(c3)=1 then +'小计' else c2 end,c3=sum(c3)
    from test 
    group by c1,c2,c3 with rollup
    having grouping(c2)=0
      

  10.   

    我試了RollUp,實現這個代碼也蠻長的,所以還不如用這個。
      

  11.   

    以下语句供楼主参考,希望有所帮助
    create table #temp(c1 char(10),c2 char(10),c3 int)
    insert into #temp
    select 'aa','生产',1000
    union select 'aa','生产',1200
    union select 'bb','生产',1300
    union select 'bb','生产',1500SELECT 
           CASE when c2 is null  THEN '合计'
                ELSE c1 
           END c1,
           isnull(c2,'') c2,
           SUM(c3) c3
    FROM #temp
    group by c1,c2 WITH ROLLUPdrop table #temp
    /*
    c1         c2         c3          
    ---------- ---------- ----------- 
    aa         生产         2200
    合计                    2200
    bb         生产         2800
    合计                    2800
    合计                    5000
    */
      

  12.   

    create table #temp(c1 char(10),c2 char(10),c3 int)
    insert into #temp
    select 'aa','生产',1000
    union select 'aa','生产',1200
    union select 'bb','生产',1300
    union select 'bb','生产',1500select case when grouping(c3)=1 then '合计' else c1 end c1,
           case when grouping(c3)=1 then '' else c2 end c1,
           sum(c3) c3
    from #temp 
    group by c1,c2,c3 with rollup
    having grouping(c2)=0drop table #temp/*
    c1         c1         c3          
    ---------- ---------- ----------- 
    aa         生产         1000
    aa         生产         1200
    合计                    2200
    bb         生产         1300
    bb         生产         1500
    合计                    2800
    */