现在有表:
单位 部门 奖金
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
这怎么弄?
单位 部门 奖金
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.取出字段名
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得到对应的下面数值
每次统计查询之前,首先动态生成一张临时表,然后将汇总结果分别
Insert into 临时表上即可,关键是动态生成临时表。
---期待更好的解决方法!!!
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中测试通过
但如果部门号任意多的话....我想你得建个部门表吧????
===============
不管怎么样,你的要求实现了,结贴哦。
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的功能,不过不能死套,具体语法看帮助吧!!
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 单位