我正在创建一个存储过程,从几个不同的表中提取汇总和值。另外,查询对于不同的过滤器来说是简单的。
查询需要连接在一起,如下所示:
select distinct(bus_name), sum(act) as 'totrev', sum(budget) as 'budget rev'
from finance
where year = '2011'
and type_desc = 'rev'
group by bus_code, bus_name
order by bus_name asc
select distinct(bus_name), sum(act) as 'totalexp', sum(budget) as 'budget exp'
from finance
where year = '2011'
and type_desc = 'exp'
group by bus_code, bus_name
order by bus_name asc
select distinct(bus_name), sum(end_balance) as 'total assets'
from Balance
where year = '2011'
and type_desc = 'assets'
group by bus_code, bus_name
order by bus_name asc
select distinct(bus_name), sum(end_balance) as 'Cash'
from Balance
where year = '2011'
and type_desc = 'equity'
group by bus_code, bus_name
order by bus_name asc
select bus_code, bus_name, count(bus_code) as '#of bldgs'
from building
group by bus_code, bus_name
order by bus_name asc
我希望合并/加入所有要在一个表中查看的列。
finance_table
columns = bus_code,bus_name,#bldgs,tot_rev,budget_rev,totalexp,budget exp,total assets,cash
答案 0 :(得分:1)
使用嵌套查询尝试这样的事情:
SELECT T5.bus_code, T5.bus_name, T5.[# of bldgs], T1.tot_rev, T1.budget_rev, T2.totalexp, T2.[budget exp], T3.[total assets], T4.cash
FROM
(
select distinct(bus_name), sum(act) as 'totrev', sum(budget) as 'budget rev'
from finance
where year = '2011'
and type_desc = 'rev'
group by bus_code, bus_name
order by bus_name asc
) T1 INNER JOIN
(
select distinct(bus_name), sum(act) as 'totalexp', sum(budget) as 'budget exp'
from finance
where year = '2011'
and type_desc = 'exp'
group by bus_code, bus_name
order by bus_name asc
) T2 ON T1.bus_name = T2.bus_name
INNER JOIN
(
select distinct(bus_name), sum(end_balance) as 'total assets'
from Balance
where year = '2011'
and type_desc = 'assets'
group by bus_code, bus_name
order by bus_name asc
) T3 ON T2.bus_name = T3.bus_name
INNER JOIN
(
select distinct(bus_name), sum(end_balance) as 'Cash'
from Balance
where year = '2011'
and type_desc = 'equity'
group by bus_code, bus_name
order by bus_name asc
) T4 ON T3.bus_name = T4.bus_name
INNER JOIN
(
select bus_code, bus_name, count(bus_code) as '#of bldgs'
from building
group by bus_code, bus_name
order by bus_name asc
) T5 ON T4.bus_name = T5.bus_name
我假设内部联接,但如果某些内容不具有特定业务的条目,则可能需要使用外部联接。但一般技术都是一样的。
答案 1 :(得分:1)
如果您的SQL支持CASE表达式,您可以使用它们为每种类型创建“虚拟”字段,然后对它们求和。
select bus_code, bus_name
,sum(case when type_desc = 'rev' then act else 0 end) as 'totrev'
,sum(case when type_desc = 'rev' then budgetelse 0 end) as 'budget rev'
,sum(case when type_desc = 'exp' then act else 0 end) as 'totexp'
,sum(case when type_desc = 'exp' then budgetelse 0 end) as 'budget exp'
... ... etc.
from finance
where year = '2011'
group by bus_code, bus_name
order by bus_name asc
最后(建筑物)表可以简单地连接到这个表,在总线代码
上