日期:2014-05-19  浏览次数:20452 次

这种汇总查询怎么来实现?
表张表:  
    学校           学号     捐款性质               金额             捐款性质               金额      
市北一中       005         义务                     200.00           慈善                   300.00
市北二中       012         义务                     200.00           义务                   200.00
市北二中       018         义务                     500.00           慈善                 800.00
市北一中       068         慈善                     500.00                                             0
市北一中       218         慈善                     50.00                                               0
我查询到象下面的效果:
    学校         人数           义务捐款金额       慈善捐款金额           汇总金额
市北一中       3                       200.00                     850.00               1050.00
市北二中       2                       900.00                     800.00               1700.00

------解决方案--------------------
select A1.学校,A1.人数,A2.义务捐款金额,A2.慈善捐款金额,A2.汇总金额
from
(
select 学校,
count(1) as 人数
From 表
group by 学校
) A1,
(
select T.学校,
sum(case when 捐款性质1= '义务 ' then 金额1 else 0 end) as 义务捐款金额,
sum(case when 捐款性质1= '慈善 ' then 金额1 else 0 end) as 慈善捐款金额,
sum(金额1) as 汇总金额
From
(
select 学校,捐款性质1,金额1
From 表
where 捐款性质1 <> ' ' and 金额1 <> 0
Union All
select 学校,捐款性质2,金额2
From 表
where 捐款性质2 <> ' ' and 金额2 <> 0
) T
group by T.学校
)A2
where A1.学校=A2.学校
------解决方案--------------------
select 学校,count(1),
sum(case when 捐款性质1= '义务 ' then 金额1 else 0 end)+sum(case when 捐款性质1= '义务 ' then 金额1 else 0 end),
sum(case when 捐款性质1= '慈善 ' then 金额1 else 0 end)+sum(case when 捐款性质1= '慈善 ' then 金额2 else 0 end),
sum(金额1+金额2)
from 表 group by 学校