现在有表:
单位  部门  奖金
01   01   200
01   02   300
01   03   300
02   01   100
02   02   150
02   03   250
要求结果是:
单位  部门01  部门02  部门03
01   200  300  300
02   100  150  250
这怎么弄?

解决方案 »

  1.   

    要分几步走
    1.取出字段名
    S1:STRING;
    S1:=AQ1.FIELD[1].FIELDBYNAME;//部门
    2.SQL查询
    select distinct 部门 from 表
    type
    S2=record 
    name:string;
    value:integer;
    end;
    var
    ss:array[0..1000] of S2
    ss[index].name:=(AQ1.FIELDBYVALUE['部门'])
    ss[index].value:=(AQ1.FIELDBYVALUE['奖金'])
    INC(index);
    3.按要求输出
    s1+ss[index].name;//得到部门01等
    根据对应的ss[index].value得到对应的下面数值
      

  2.   

    这个问题我以前碰到过,供参考:
    每次统计查询之前,首先动态生成一张临时表,然后将汇总结果分别
    Insert into 临时表上即可,关键是动态生成临时表。
    ---期待更好的解决方法!!!
      

  3.   

    select A.单位,sum(奖金1) as 部门01,sum(奖金2) as 部门02,sum(奖金3) as 部门03 
    from 
    (select 单位,sum(奖金) as 奖金1,0 as 奖金2,0 as 奖金3
     from table1
     where 部门='01'
     group by 单位,部门
     union
    select 单位,0 as 奖金1,sum(奖金) as 奖金2,0 as 奖金3
     from table1
     where 部门='02'
     group by 单位,部门
     union
    select 单位,0 as 奖金1,0 as 奖金2,sum(奖金) as 奖金3
     from table1
     where 部门='03'
     group by 单位,部门
     
    )A
    group by 单位========================
    以上在SQLSERVER2000中测试通过
    但如果部门号任意多的话....我想你得建个部门表吧????
    ===============
    不管怎么样,你的要求实现了,结贴哦。
      

  4.   

    现在我做的这个是有80多个单位,每个的部门数1~5不等,再建新表或临时表都可以,或是dephi解决也行。最好帮忙多加点注释。
      

  5.   

    如果是SQL Server,如下:
    select 单位,sum(部门01) 部门01,sum(部门02) 部门02,sum(部门03) 部门03 from
    (
    select 单位 AS 单位,
          '部门01'=CASE WHEN (部门='01' ) THEN 奖金 ELSE 0 END ,
          '部门02'=CASE WHEN (部门='02' ) THEN 奖金 ELSE 0 END ,
          '部门03'=CASE WHEN (部门='03' ) THEN 奖金 ELSE 0 END 
    from 表
    ) M
    group by 单位不过,我估计你的单位和部门相关信息都是动态的,也就是说这个流水表关于单位与部门的信息不会就是固定的那几个(部门:01,02,03),它会根据单位字典与部门字典中的内容的多少而改变。所以,如果是动态的,那上面的SQL语句中When Case部分就得要动态的生成,而不能写死,因为你不知道到底单位和部门信息会不会增加。如果是Oracle,用Decode函数代替When Case的功能,不过不能死套,具体语法看帮助吧!!
      

  6.   

    忘说了,父查询中的sum()语句也要根据单位字典与部门字典表的信息动态生成^-^
      

  7.   

    在oracle中这样实现select dw,decode(bm,'01',sum(jj),0),decode(bm,'02',sum(jj),0),decode(bm,'01',sum(jj),0)    from table group by dw。其中有多少个“decode(bm,'01',sum(jj),0)”语句,可以看你的部门是多少个了。我希望你的数据库设计的时候,单位是一个表,部门单位再是一个表,这个部门单位奖金一个表,就可以用select bm from 单位部门表 group by bm;去确定要写多少个decode语句,然后给commandtext就可以了。
      

  8.   

    都怪小弟对SQL认识不深,没说清楚,用的ADOQuery查的是access的数据库,用access是必须的。像你们上面说的CASE和decode好像都用不了。
      

  9.   

    如果这样的话,表应该分开吧。。是不是设计上有点问题了
    select A.单位,sum(奖金1) as 部门01,sum(奖金2) as 部门02,sum(奖金3) as 部门03 
    from 
    (select 单位,sum(奖金) as 奖金1,0 as 奖金2,0 as 奖金3
     from table1
     where 部门='01'
     group by 单位,部门
     union
    select 单位,0 as 奖金1,sum(奖金) as 奖金2,0 as 奖金3
     from table1
     where 部门='02'
     group by 单位,部门
     union
    select 单位,0 as 奖金1,0 as 奖金2,sum(奖金) as 奖金3
     from table1
     where 部门='03'
     group by 单位,部门
     
    )A
    group by 单位