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

关于SQL聚合函数,把两个表的数据聚合起来的问题!
我这里有两个表,
表1: 收费表
字段:小区 楼座 单元 房间 费用名称 费用金额
数据:A区 1 1 101 物业费1 100
  A区 1 1 102 物业费2 200

表2: 费用表
字段:费用名称 单价 费用归类
数据: 物业费1 1 物业费
  物业费2 2 物业费

我想查:物业费一共收了多少钱?


------解决方案--------------------
不知道,你具体是个什么算法,以下两种内容,自己选择一个.
SQL code
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 收费表,费用表

------解决方案--------------------
SQL code

--> 测试数据:[收费表]
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
*/