帮忙看一个查询语句,能否优化一下.

niyangping 2007-12-26 10:52:50
看下面的语句:
里面的 STOJOU表是一个库存的日记帐表,数量增加为正,减少为负
QTYSTU 为数量 IPTDAT 为日期,ITMREF为物料编码,TRSNUM为交易类型
由于我们现在还是用的SQL2000,且该张表的记录已经达到360万左右,查询时间比较长,想问一下优化的方法,增加查询的速度
问题有两个:
1,优化,FROM SGHNNW.STOJOU WHERE ITMREF_0 IN (SELECT ITMREF_0 FROM SGHNNW.PRECEIPTD)
这个查询大概有1万多条数据
2,比如一个月的期初,我想用上个月的期初+这个月的数量和 来减少运算量,我像下面这样写是不正确的语法,应该如何调整.

SUM(CASE WHEN IPTDAT_0>=@YEAR+'0101'AND IPTDAT_0<@YEAR+'0201' THEN QTYSTU_0 ELSE 0 END)+JANSTR AS FEBSTR,

--新人,不知道能不能给分


DECLARE @YEAR CHAR(4)
SET @YEAR='2007'
SELECT ITMREF_0,
SUM(CASE WHEN IPTDAT_0<@YEAR+'0101' THEN QTYSTU_0 ELSE 0 END)AS JANSTR,
SUM(CASE WHEN TRSNUM_0 IN ('SR1','SR2','SR3','SRQ')AND IPTDAT_0>=@YEAR+'0101' AND IPTDAT_0<@YEAR+'0201' THEN QTYSTU_0 ELSE 0 END)AS JAN,
SUM(CASE WHEN IPTDAT_0>=@YEAR+'0101'AND IPTDAT_0<@YEAR+'0201' THEN QTYSTU_0 ELSE 0 END)+JANSTR AS FEBSTR,
SUM(CASE WHEN TRSNUM_0 IN ('SR1','SR2','SR3','SRQ')AND IPTDAT_0>=@YEAR+'0201' AND IPTDAT_0<@YEAR+'0301' THEN QTYSTU_0 ELSE 0 END)AS JAN

---2月期初+2月数量和=3月期初
---2月消耗
---3月期初+3月数量和=4月期初
---3月消耗
---4月期初+4月数量和=5月期初
---4月消耗

--................

---12月期初+12月数量和=第2年第1月期初
---12月消耗

FROM SGHNNW.STOJOU WHERE ITMREF_0 IN (SELECT ITMREF_0 FROM SGHNNW.PRECEIPTD)
AND TRSNUM_0<>'QC1'
GROUP BY ITMREF_0

...全文
107 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
benke520 2007-12-27
  • 打赏
  • 举报
回复
学习
niyangping 2007-12-27
  • 打赏
  • 举报
回复

--如果优化不了的话,我想问一下, 下面这个语句中的 sum(QUANTITY)会重复计算吗?
SELECT ITEM,SUM(QUANTITY),SUM(QUANTITY)+1 FROM TABLE GROUP BY ITEM
niyangping 2007-12-26
  • 打赏
  • 举报
回复
其实不长啊,就一两条关键的求值的语句,其它的都是重复撒

就是想知道有没有比较科学的写法,可以让查询的速度达到最快.
arrow_gx 2007-12-26
  • 打赏
  • 举报
回复
up 太长了,
niyangping 2007-12-26
  • 打赏
  • 举报
回复
长的就帮顶啊?
liangCK 2007-12-26
  • 打赏
  • 举报
回复
长.帮顶.

34,838

社区成员

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

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