日期:2014-05-18 浏览次数:20600 次
create table 收费表(小区 varchar(10),楼座 int,单元 int,房间 int,费用名称 varchar(10),费用金额 int)
insert into 收费表 values('A区', 1, 1 ,101 ,'物业费1', 100)
insert into 收费表 values('A区', 1, 1 ,102 ,'物业费2', 200)
create table 费用表(费用名称 varchar(10),单价 int,费用归类 varchar(10))
insert into 费用表 values('物业费1', 1 ,'物业费')
insert into 费用表 values('物业费2', 2 ,'物业费')
go
select sum(m.费用金额 * n.单价) 物业费 from 收费表 m , 费用表 n where m.费用名称 = n.费用名称
/*
物业费
-----------
500
(所影响的行数为 1 行)
*/
select sum(物业费) 物业费 from
(
select 费用金额 物业费 from 收费表 where 费用名称 like '%物业费%'
union all
select 单价 物业费 from 费用表 where 费用名称 like '%物业费%'
) t
/*
物业费
-----------
303
(所影响的行数为 1 行)
*/
drop table 收费表,费用表
------解决方案--------------------
--> 测试数据:[收费表]
if object_id('[收费表]') is not null
drop table [收费表]
create table [收费表](
[小区] varchar(3),
[楼座] int,
[单元] int,
[房间] int,
[费用名称] varchar(7),
[费用金额] int
)
insert [收费表]
select 'A区',1,1,101,'物业费1',100 union all
select 'A区',1,1,102,'物业费2',200
--> 测试数据:[费用表]
if object_id('[费用表]') is not null
drop table [费用表]
create table [费用表](
[费用名称] varchar(7),
[单价] int,
[费用归类] varchar(6)
)
insert [费用表]
select '物业费1',1,'物业费' union all
select '物业费2',2,'物业费'
select 费用归类,SUM([费用金额]) [费用金额] from(
select a.*,b.费用归类 from [收费表] a
inner join [费用表] b on a.费用名称=b.费用名称)d
where 费用归类='物业费'
group by 费用归类
/*
费用归类 费用金额
物业费 300
*/