难缠的VIEW,我写速度太慢,请教。。。

chenzhr 2006-01-10 09:18:44
情况比较复杂:
共有4个表:
表1:项目计划表 (约80条记录)
字段:项目名 数量
a 22
表2:项目下小项目表 (约3000条记录)
字段:项目名 小项目名
a a1
a a2
表3:项目下小项目表详细项表 (约6000条记录)
字段:小项目名 具体项目
a1 a11
a1 a12
a2 a21
a2 a22
表4:基础数据表 (约4000条记录)
字段:具体项目 金额
a22 10.0
a12 2.0
现需要统计每个项目的金额和。做一个VIEW。
关键是每个小项目名下的具体项目在基础数据表中不一定都有,只统计基础数据表中有的项。

我的做法:
先对项目表建立一个CURSOR FOR SELECT 项目名,数量
在上述CURSOR循环中再对项目下小项目表建立一个CURSOR FOR 小项目名
用 SELECT SUM(金额) FROM 基础数据表 WHERE 具体项目 IN
(SELECT 具体项目 FROM 项目下小项目表详细项表 WHERE 小项目名 =@小项目名)
注:我用INNER JOIN ON 代替IN ,好象执行时间没什么变化。
最后利用变量求出总金额。
大约耗时34秒。
请大家看看什么问题,有什么好的思路?谢先。





...全文
116 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenzhr 2006-01-11
  • 打赏
  • 举报
回复
昨晚有事,请接分!
ReViSion 2006-01-10
  • 打赏
  • 举报
回复
select a.项目名,sum(isnull(a.数量,1)*isnull(b.数量,1)*isnull(c.数量,1)*isnull(d.金额,1))
from 表1 a,表2 b,表3 c,表4 d
where a.项目名=b.项目名 and b.小项目名=c.小项目名
and c.具体项目=d.具体项目
group by a.项目名
lw1a2 2006-01-10
  • 打赏
  • 举报
回复
select sum(表1.数量*表2.数量*表3.数量*金额)
from 表1,表2,表3,表4
where 表1.项目名=表2.项目名 and 表2.小项目名=表3.小项目名
and 表3.具体项目=表4.具体项目 and 表1.项目名='a'
chenzhr 2006-01-10
  • 打赏
  • 举报
回复
高手帮忙呀!
chenzhr 2006-01-10
  • 打赏
  • 举报
回复
lw1a2,不好意思呀,我表结构没有写全:
应该是:
项目下小项目表 还有字段’数量‘ 表示小项目的数量
项目下小项目表详细项表 还有字段’数量‘ 表示具体项目的数量
统计是应都考虑。

新鲜鱼排 2006-01-10
  • 打赏
  • 举报
回复
mark
songyangaaron 2006-01-10
  • 打赏
  • 举报
回复
select sum from(select ... from 表2 left join 表3)a inner join 表4

执行时间绝对不超过3秒。
lw1a2 2006-01-10
  • 打赏
  • 举报
回复
select sum(金额)*数量
from 表1,表2,表3,表4
where 表1.项目名=表2.项目名 and 表2.小项目名=表3.小项目名
and 表3.具体项目=表4.具体项目 and 表1.项目名='a'

34,594

社区成员

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

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