日期:2014-05-18 浏览次数:20487 次
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 */