SQL如何实现这样的连接?

weijswht 2009-02-26 12:34:41
现在有两张表
计划表
业务员 存货 计划金额
张三 A 1000
李四 A 2000


实际表
业务员 存货 实际金额
张三 A 900
张三 B 800




要出这样的一张分析报表 怎么实现?
业务员 存货 实际金额 计划金额 计划完成率
张三 A 1000 900 90%
张三 B 800
李四 A 2000
合计 3000 1700 56.67%
...全文
48 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
winter75 2009-02-26
  • 打赏
  • 举报
回复
Select  A.业务员, A.存货, B.实际金额,A.计划金额, B.实际金额*1.0/ A.计划金额 as计划完成率 
From计划表 A left outer join实际表 B
On (A. 业务员=B. 业务员 and A.存货=B.存货)
Union all
Select ‘合计’ as业务员,’’ as存货,N. 计划金额,N. 实际金额, N.实际金额*1.0/ N.计划金额 as计划完成率
From
(Select sum(A. 计划金额) 计划金额,sum(B.实际金额) 实际金额
From计划表 A,实际表 B)N
ljhcy99 2009-02-26
  • 打赏
  • 举报
回复
Select A.业务员, A.存货, B.实际金额,A.计划金额, B.实际金额*1.0/ A.计划金额 as计划完成率
From计划表 A left outer join实际表 B
On (A. 业务员=B. 业务员 and A.存货=B.存货)
Union all
Select ‘合计’ as业务员,’’ as存货,A. 计划金额,A. 实际金额, A.实际金额*1.0/ A.计划金额 as计划完成率
From
(Select sum(A. 计划金额) 计划金额,sum(B.实际金额) 实际金额
From计划表 A,实际表 B)A
htl258_Tony 2009-02-26
  • 打赏
  • 举报
回复
先帮顶,午休一下再看,没人回再回。
叶子 2009-02-26
  • 打赏
  • 举报
回复

declare @计划表 table (业务员 varchar(4),存货 varchar(1),计划金额 int)
insert into @计划表
select '张三','A',1000 union all
select '李四','A',2000 union all
select '张三','B',null

--select * from @计划表

declare @实际表 table (业务员 varchar(4),存货 varchar(1),实际金额 int)
insert into @实际表
select '张三','A',900 union all
select '张三','B',800

--select * from @实际表



select dd.*,round(cast(dd.实际金额 as float)/dd.计划金额,2) as 计划完成率 from (
select bb.* from
(
select a.*,b.实际金额 from @计划表 a left join @实际表 b on a.业务员+a.存货=b.业务员+b.存货
)
bb
union all
select '合计','',sum(计划金额),sum(实际金额) from (select a.*,b.实际金额 from @计划表 a left join @实际表 b on a.业务员+a.存货=b.业务员+b.存货)cc
) dd order by 业务员 desc

/*
业务员 存货 计划金额 实际金额 计划完成率
---- ---- ----------- ----------- ----------------------
张三 A 1000 900 0.9
张三 B NULL 800 NULL
李四 A 2000 NULL NULL
合计 3000 1700 0.57
*/
ljhcy99 2009-02-26
  • 打赏
  • 举报
回复
-修改了
Select A.业务员, A.存货, B.实际金额,A.计划金额, B.实际金额*1.0/ A.计划金额 as计划完成率
From计划表 A left outer join实际表 B
On (A. 业务员=B. 业务员)
Union all
Select ‘合计’ as业务员,’’ as存货,A. 计划金额,B. 实际金额, B.实际金额*1.0/ A.计划金额 as计划完成率
From
(Select sum(A. 计划金额) 计划金额
From计划表 A) A,
(select sum(B.实际金额) 实际金额
from
实际表 B)B

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧