日期:2014-05-18  浏览次数:20473 次

求 SQL 语句,关于统计求和
有2个表,a成本,b帐单,
a:
id     成本名称       成本金额
1         车费                           10
1         电话费                         5
1         餐费                         100
1         交际费                       50
2         误工费                       100
2         车费                           20
2         餐费                           50


b:
id     应收费用       应收金额
1         劳务费                 400
1         交际费                   50
2         劳务费                 300
1         餐费                     100
1         车费                       50
2         误工费                 100
2         车费                         20
2         餐费                         50

要计算每个id的毛利,即:应收金额-成本金额,但应收、成本里面的交际费、误工费要排除在外;还有,要计算所有id的毛利之和,又该如何?

------解决方案--------------------
是否还有第三种费用要排除在外??

------解决方案--------------------
create table A(id int, 成本名称 nvarchar(10), 成本金额 int)
insert A select 1, '车费 ', 10
union all select 1, '电话费 ', 5
union all select 1, '餐费 ', 100
union all select 1, '交际费 ', 50
union all select 2, '误工费 ', 100
union all select 2, '车费 ', 20
union all select 2, '餐费 ', 50

create table B(id int, 应收费用 nvarchar(10), 应收金额 int)
insert B select 1, '劳务费 ', 400
union all select 1, '交际费 ', 50
union all select 2, '劳务费 ', 300
union all select 1, '餐费 ', 100
union all select 1, '车费 ', 50
union all select 2, '误工费 ', 100
union all select 2, '车费 ', 20
union all select 2, '餐费 ', 50

select A.*, 应收金额=isnull(B.应收金额, 0), 毛利=isnull(B.应收金额, 0)-A.成本金额 from
(
select id, 成本金额=sum(成本金额)
from A
where 成本名称 not in( '交际费 ', '误工费 ')
group by id
)A
left join
(
select id, 应收金额=sum(应收金额)
from B
where 应收费用 not in( '交际费 ', '误工费 ')
group by id
) B on A.id=B.id

--result
id 成本金额 应收金额 毛利
----------- ----------- ----------- -----------
1