Office中国论坛/Access中国论坛

标题: [求助][ 为什么这个查询这么慢? 怎么改?资料已上传 [打印本页]

作者: min_summer    时间: 2006-9-20 22:26
标题: [求助][ 为什么这个查询这么慢? 怎么改?资料已上传
SELECT 营业业绩.*, (SELECT TOP 1 应销售单价 from 报价查询数据表 where 条形码&报价类别=营业业绩.商品条形码&营业业绩.单价类别 and 报价日期<=营业业绩.日期 order by 报价日期 desc) AS 价格


FROM 营业业绩, 报价查询数据表;








在两个资料表中都有2-3万条记录, 不算多吧!可是运行起这个查询超慢? 怎么做才能快一点啊!








已经上传了! 请高手看一下[attach]20439[/attach]



[此贴子已经被作者于2006-9-22 9:29:28编辑过]


作者: wwwwa    时间: 2006-9-20 22:42
没有看到表及记录,TRY:

SELECT A.*,B.价格 FROM  营业业绩  A ,(SELECT A.条形码, A.报价类别,MIN(A.应销售单价)AS 价格 from 报价查询数据表 A INNER JOIN 营业业绩 B ON A.条形码& A.报价类别=B.商品条形码&B.单价类别 and A.报价日期<=B.日期 GROUP BY A.条形码, A.报价类别) B WHERE A.条形码& A.报价类别=B.商品条形码&B.单价类别

[此贴子已经被作者于2006-9-20 14:44:44编辑过]


作者: min_summer    时间: 2006-9-20 23:05
没有看懂啊

贴进去也不能运行
作者: wwwwa    时间: 2006-9-20 23:08
上传MDB,10多条记录即可。
作者: andymark    时间: 2006-9-20 23:09
如果方便,把例子传上来


作者: min_summer    时间: 2006-9-20 23:18
在繁体中的可以吗?


作者: wwwwa    时间: 2006-9-20 23:26
yes
作者: min_summer    时间: 2006-9-20 23:34
已经上传了! 这两个表其实是我用生成资料表查询做出来的! 为的是想用资料表在做查询会不会快点  结果好慢  不知哪里有问题! 他跳出结果很快! 可是并没有能够一下子显示出所有的记录数! 要等很久才跳出总数! 为什么啊
作者: min_summer    时间: 2006-9-20 23:58
等待中啊!
作者: wwwwa    时间: 2006-9-20 23:58
try:

SELECT qq.*, B1.价格
FROM 營業業績 AS qq, (SELECT A.條碼, a.報價類別, Max(A.應銷售單價) AS 价格
FROM 報價查詢資料表 AS A INNER JOIN 營業業績 AS B ON (a.報價日期<=b.日期) AND (a.報價類別=b.單價類別) AND (a.條碼=b.商品條碼)
GROUP BY A.條碼, a.報價類別) AS B1
WHERE b1.條碼=qq.商品條碼 and
b1.報價類別=qq.單價類別;

作者: min_summer    时间: 2006-9-21 00:04
恩! 快多了

谢谢! 我得好好研究一下你的这个做法了!
作者: min_summer    时间: 2006-9-21 00:06
谢谢! 真的快很多!  我要好好研究一下了!   多谢多谢
作者: min_summer    时间: 2006-9-21 00:07
不對呀! 我要的不是最大數  是要看日期的呀! ----- 誰來幫幫我呀! 為什麼我那樣做會那麼的慢呢? 該怎麼改

[此贴子已经被作者于2006-9-22 8:55:47编辑过]


作者: min_summer    时间: 2006-9-22 16:58
自己頂一下! 要沉下去了呀!
作者: wwwwa    时间: 2006-9-22 17:28
是取最大日期所对应的单价?
作者: min_summer    时间: 2006-9-22 17:31
是的! 但要和营业日期再比较的! 就是要娶和营业日期最近的一个日期的报价
作者: 浩雨    时间: 2006-9-22 17:34
表没设计好,两表没关系且放在一个查询中。查询将对记录进行192*15874次链接后才能显示数据。请问这两个是什么关系?请参阅:http://www.office-cn.net/forum.php?mod=viewthread&tid=46720&replyID=&skin=1
作者: min_summer    时间: 2006-9-22 17:48
这两个表是有关系的啊!  在报价中 有商品条码和报价类别   在营业记录中也有商品条码和报价类别, 我想做的是 看营业记录中的售价有没有买错 它在报价中的单价是多少! 但报价不是唯一的 它分时期的  所以还要看与 在商品条码和报价类别匹配时 与营业日记最接近的那个报价格
作者: wwwwa    时间: 2006-9-22 18:26
try:

SELECT qq.*, B.jg
FROM 營業業績 AS qq,
(SELECT DISTINCT A.條碼, a.報價類別, ([報價日期]) AS rq, 應銷售單價 as jg
FROM 報價查詢資料表 AS A INNER JOIN 營業業績 AS B ON (a.條碼=b.商品條碼) AND (a.報價類別=b.單價類別) AND (a.報價日期<=b.日期)) b
WHERE b.條碼=qq.商品條碼 and
b.報價類別=qq.單價類別
作者: min_summer    时间: 2006-9-22 18:54
我试过了! 当两个资料表的记录都超过1.5万条时  等的时间让我没有耐心等下去啊!
作者: wwwwa    时间: 2006-9-22 19:04
1、结果是否正确;

2、你将WHERE 换成INNER试试;

SELECT qq.*, B.jg
FROM 營業業績 AS qq

inner join  
(SELECT DISTINCT A.條碼, a.報價類別, ([報價日期]) AS rq, 應銷售單價 as jg
FROM 報價查詢資料表 AS A INNER JOIN 營業業績 AS B ON (a.條碼=b.商品條碼) AND (a.報價類別=b.單價類別) AND (a.報價日期<=b.日期)) b
on b.條碼=qq.商品條碼 and
b.報價類別=qq.單價類別

3、如还是慢,你只有换SQL SERVER OR MSDE了。
作者: min_summer    时间: 2006-9-22 19:10
多谢你了! 刚刚我试了一下!好像快了很多了! 第一次贴进去运行的时候有点不对劲  现在好多了! 多谢你了! 忠心感谢!


作者: min_summer    时间: 2006-9-22 19:13
现在你的两个方法都在3秒已内了! [em02]
作者: min_summer    时间: 2006-9-22 19:53
还是不大对! 价格的资料并不匹配!价格并没有一对一的出来! 如营业记录中有1000条的话  查询出来可能有1200条记录 价格并没有取最大啊!而是有几笔报价就取几笔资料了
作者: min_summer    时间: 2006-9-22 21:14
自己在顶一下吧!
作者: wwwwa    时间: 2006-9-22 21:48
1、将正确结果贴出来看看;

2、看了一下你的SQL语句,在報價日期<=日期的记录集中取日期最大的记录所对应的单价,TRY

SELECT A.條碼, a.報價類別, max(rq),last([應銷售單價]) AS dj
FROM (SELECT A.條碼, a.報價類別, ([報價日期]) AS rq, [應銷售單價]
FROM 報價查詢資料表 AS A inner JOIN 營業業績 AS B ON (a.報價日期<=b.日期) AND (a.報價類別=b.單價類別) AND (a.條碼=b.商品條碼)
order by A.條碼, a.報價類別,3) AS a
GROUP BY A.條碼, a.報價類別;
你检查一下单价是否正确,如正确,与另一表相连就OK了,自己修改SQL语句。

[此贴子已经被作者于2006-9-22 13:48:34编辑过]


作者: min_summer    时间: 2006-9-22 22:38
我要哭了
作者: bh_jds    时间: 2006-9-22 23:32
不知道啊,我权限不够,看不到!!!
作者: laiguiyou    时间: 2006-9-23 00:24
这种查询是怎么做出来的,qq和b是怎么来的,并没有qq查询啊
作者: laiguiyou    时间: 2006-9-23 00:26
SELECT 采购清单.产品编号, 采购清单.材料名称, 采购清单.订单号, 采购清单.单位, 采购清单.规格, 采购清单.客户编号, 采购清单.材料编号, Int([订单用量]*1000+0.05)/1000 AS 用量, Int([数量]*1000+0.05)/1000 AS 采购合计, Int(Sum(NZ([订单用量],0)-Nz([数量],0))*1000+0.05)/1000 AS 可采购数, 采购清单.确认
FROM 采购清单 LEFT JOIN 采购汇总 ON (采购清单.产品编号 = 采购汇总.产品代号) AND (采购清单.材料编号 = 采购汇总.材料编号) AND (采购清单.订单号 = 采购汇总.订单号) AND (采购清单.客户编号 = 采购汇总.客户编号)
GROUP BY 采购清单.产品编号, 采购清单.材料名称, 采购清单.订单号, 采购清单.单位, 采购清单.规格, 采购清单.客户编号, 采购清单.材料编号, Int([订单用量]*1000+0.05)/1000, Int([数量]*1000+0.05)/1000, 采购清单.确认, 采购清单.出货日期
HAVING (((Int(Sum(NZ([订单用量],0)-Nz([数量],0))*1000+0.05)/1000)>0) AND ((采购清单.确认)=-1));
这个查询也非常的慢,还有没有什么办法快一点?
作者: 浩雨    时间: 2006-9-27 08:28
问题解决了吗?
作者: min_summer    时间: 2006-9-27 16:09
问题解决了!  这还要多谢wwwwa了! 
作者: wwwwa    时间: 2006-9-27 16:47
将代码贴出来,让大家分享一下。
作者: min_summer    时间: 2006-9-27 17:06
这是ACCESS加和,去掉即可,将方括号([)改为(,两个地方。




SELECT a.自動編號,a.日期, a.产品, a.数量, first(价格)
FROM (SELECT a.自動編號,a.日期, a.产品, a.数量, (b.价格)
FROM 出货 a left join 价格 b
on a.产品=b.产品 and a.類別=b.類別 and a.日期>=b.日期) a
GROUP BY a.自動編號,a.日期, a.产品, a.数量;

這個還是WWWA的方法呀!  只是我在出貨的表中加了自動編號! 否則出貨記錄中相同的會被去掉的!  

我是引用了wwwa的這個方法的, 我的題目還有一個類別, 加在on a.产品=b.产品 and a.類別=b.類別 and a.日期>=b.日期 這里了!

不好意思 字段有點不一樣!

[此贴子已经被作者于2006-9-27 9:07:47编辑过]


作者: min_summer    时间: 2006-9-27 17:23
SELECT a.自动编号, a.抬頭名稱, a.日期, a.單據號碼, a.商品條碼, a.數量, a.單價, a.折讓, a.單價類別, a.營業額, a.備注, First(a.報價) AS 報價, [報價]-[單價] AS 价差
FROM [select a.自动编号,a.抬頭名稱, a.日期, a.單據號碼, a.商品條碼, a.數量, a.單價, a.折讓, a.單價類別, a.營業額, a.備注,(b.報價)
from 销售记录 a left join 报价查询 b
on a.商品條碼=b.商品條碼 and a.單價類別=b.價格類別 and  a.日期>=b.報價日期]. AS a
GROUP BY a.自动编号, a.抬頭名稱, a.日期, a.單據號碼, a.商品條碼, a.數量, a.單價, a.折讓, a.單價類別, a.營業額, a.備注;

作者: wwwwa    时间: 2006-9-27 17:26
不错,自己解决了。
作者: min_summer    时间: 2006-9-27 17:32
wwwwa 我还有一个问题啊! 就是 查询我是做出来了! 可是我想把这个单价做在窗体中怎么做啊! 我原来把查询中的数据用dlookup做到出货的窗体中  可是数据多了 还是会很慢的! 该怎么解决dlookup慢的问题啊!http://www.office-cn.net/forum.php?mod=viewthread&tid=48065&replyID=&skin=1 这是我新发表的话题 可是好久没人理我![em14]

[此贴子已经被作者于2006-9-27 9:33:25编辑过]


作者: wwwwa    时间: 2006-9-27 17:37
用SELECT a.自动编号, a.抬頭名稱, a.日期, a.單據號碼, a.商品條碼, a.數量, a.單價, a.折讓, a.單價類別, a.營業額, a.備注, First(a.報價) AS 報價, [報價]-[單價] AS 价差
FROM [select a.自动编号,a.抬頭名稱, a.日期, a.單據號碼, a.商品條碼, a.數量, a.單價, a.折讓, a.單價類別, a.營業額, a.備注,(b.報價)
from 销售记录 a left join 报价查询 b
on a.商品條碼=b.商品條碼 and a.單價類別=b.價格類別 and  a.日期>=b.報價日期]. AS a
GROUP BY a.自动编号, a.抬頭名稱, a.日期, a.單據號碼, a.商品條碼, a.數量, a.單價, a.折讓, a.單價類別, a.營業額, a.備注;
这个SQL语句中的单价?
作者: min_summer    时间: 2006-9-27 17:45
不好意思!  因為我上傳的那個附件其實和我實際做的檔案有點不一樣的! 但原理都是用了你wwwwa的這個方法的, 但是有一點要說明的, 就是b價格查詢 的字段很講究的,一定要是日期 商品條碼 價格類別 報價 這樣的順序  要是日期不在最前面 照樣是錯的![attach]20593[/attach]


[此贴子已经被作者于2006-9-27 9:49:23编辑过]


作者: 浩雨    时间: 2006-9-27 18:09
用函数返回报价[attach]20594[/attach]

作者: min_summer    时间: 2006-9-27 18:20
謝謝! 我研究一下! 我不懂vb 所以得有一會兒了! 謝謝浩雨




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3