因项目需要,下面这个视图搞不定,希望高手帮忙一下,谢谢表一
项目编号 项目名称 项目金额
10 项目1 100
11 项目2 200表二
金额编号 项目编号 金额数量 金额类型
10 10 30 收入
11 10 15 收入
13 10 10 支出
14 11 50 收入
15 11 20 支出
求一个生成如下表三的视图的方法表三
项目标号 项目名称 项目金额 金额数量 金额类型 项目总金额 收入总金额 支出总金额
10 项目1 100 30 收入 300 95 30
10 项目1 100 15 收入 300 95 30
10 项目1 100 10 支出 300 95 30
11 项目2 200 50 收入 300 95 30
11 项目2 200 20 支出 300 95 30表三为表一和表二组成的视图表三里的”项目总金额“是表一里所有“项目金额”的总和,“收入总金额”是表二里所有“金额类型”为收入的总和,支出总金额是表二里所有“金额类型”为支出的总和
项目编号 项目名称 项目金额
10 项目1 100
11 项目2 200表二
金额编号 项目编号 金额数量 金额类型
10 10 30 收入
11 10 15 收入
13 10 10 支出
14 11 50 收入
15 11 20 支出
求一个生成如下表三的视图的方法表三
项目标号 项目名称 项目金额 金额数量 金额类型 项目总金额 收入总金额 支出总金额
10 项目1 100 30 收入 300 95 30
10 项目1 100 15 收入 300 95 30
10 项目1 100 10 支出 300 95 30
11 项目2 200 50 收入 300 95 30
11 项目2 200 20 支出 300 95 30表三为表一和表二组成的视图表三里的”项目总金额“是表一里所有“项目金额”的总和,“收入总金额”是表二里所有“金额类型”为收入的总和,支出总金额是表二里所有“金额类型”为支出的总和
from 表一 a , 表二 b ,
(
select 项目编号 ,
sum(case 金额类型 when '收入' then 金额数量 else 0 end) 收入总金额 ,
sum(case 金额类型 when '支出' then 金额数量 else 0 end) 支出总金额
from 表二
group by 项目编号
) t
where a.项目编号 = b.项目编号 and a.项目编号 = t.项目编号
create table 表一(项目编号 int,项目名称 varchar(10),项目金额 int)
insert into 表一 values(10, '项目1', 100)
insert into 表一 values(11, '项目2', 200)
create table 表二(金额编号 int , 项目编号 int , 金额数量 int , 金额类型 varchar(10))
insert into 表二 values(10, 10, 30, '收入')
insert into 表二 values(11, 10, 15, '收入')
insert into 表二 values(13, 10, 10, '支出')
insert into 表二 values(14, 11, 50, '收入')
insert into 表二 values(15, 11, 20, '支出')
goselect a.* , b.金额数量 , b.金额类型 ,
项目总金额 = (select sum(项目金额) from 表一) ,
收入总金额 = (select sum(金额数量) from 表二 where 金额类型 = '收入'),
支出总金额 = (select sum(金额数量) from 表二 where 金额类型 = '支出')
from 表一 a , 表二 b
where a.项目编号 = b.项目编号drop table 表一,表二/*
项目编号 项目名称 项目金额 金额数量 金额类型 项目总金额 收入总金额 支出总金额
----------- ---------- ----------- ----------- ---------- ----------- ----------- -----------
10 项目1 100 30 收入 300 95 30
10 项目1 100 15 收入 300 95 30
10 项目1 100 10 支出 300 95 30
11 项目2 200 50 收入 300 95 30
11 项目2 200 20 支出 300 95 30(所影响的行数为 5 行)*/
create table one(项目编号 int,项目名称 varchar(50),项目金额 int)
insert into one select 10,'项目1',100
insert into one select 11,'项目2',200create table two(金额编号 varchar(10),项目编号 varchar(10),金额数量 int,金额类型 varchar(10))
insert into two select 10,10,30,'收入'
insert into two select 11,10,15,'收入'
insert into two select 13,10,10,'支出'
insert into two select 14,11,50,'收入'
insert into two select 15,11,20,'支出'
select a.项目编号,a.项目名称,a.项目金额,金额数量,金额类型,
(select sum(项目金额) from one)'项目总金额',
(select sum(金额数量) from two where 金额类型='收入')'收入总金额',
(select sum(金额数量) from two where 金额类型='支出')'支出总金额'
from one a,two b
where a.项目编号=b.项目编号
insert into 表一 values(10, '项目1', 100)
insert into 表一 values(11, '项目2', 200)
create table 表二(金额编号 int , 项目编号 int , 金额数量 int , 金额类型 varchar(10))
insert into 表二 values(10, 10, 30, '收入')
insert into 表二 values(11, 10, 15, '收入')
insert into 表二 values(13, 10, 10, '支出')
insert into 表二 values(14, 11, 50, '收入')
insert into 表二 values(15, 11, 20, '支出')
goselect a.* , b.金额数量 , b.金额类型 ,
项目总金额 = (select sum(项目金额) from 表一) ,
收入总金额 = (select sum(金额数量) from 表二 where 金额类型 = '收入'),
支出总金额 = (select sum(金额数量) from 表二 where 金额类型 = '支出')
from 表一 a , 表二 b
where a.项目编号 = b.项目编号drop table 表一,表二/*
项目编号 项目名称 项目金额 金额数量 金额类型 项目总金额 收入总金额 支出总金额
----------- ---------- ----------- ----------- ---------- ----------- ----------- -----------
10 项目1 100 30 收入 300 95 30
10 项目1 100 15 收入 300 95 30
10 项目1 100 10 支出 300 95 30
11 项目2 200 50 收入 300 95 30
11 项目2 200 20 支出 300 95 30(所影响的行数为 5 行)*/