提个问题,关于SQL语句的,分数不多。请进来看一下。(20分)

  • 主题发起人 主题发起人 sum_z_x
  • 开始时间 开始时间
S

sum_z_x

Unregistered / Unconfirmed
GUEST, unregistred user!
SELECT gprk_2.dddh, gprk_2.pmgg, gprk_2.color, gprk_2.dw, SUM(gprk_2.sl) AS rsl,
SUM(gpck_2.sl) AS csl FROM gprk_2 left OUTER JOIN gpck_2 ON gprk_2.dddh = gpck_2.dddh AND gprk_2.pmgg = gpck_2.pmgg AND gprk_2.color = gpck_2.color AND gpck_2.zt = 'zcc' WHERE (gprk_2.zt = 'zcc') AND (YEAR(gprk_2.rq) = YEAR(GETDATE())) AND (MONTH(gprk_2.rq) >= 9) AND (gprk_2.dh <> '') AND (30 <= DATEDIFF(dd, gprk_2.rq, GETDATE())) GROUP BY gprk_2.dddh, gprk_2.pmgg, gprk_2.color, gprk_2.dw ORDER BY gprk_2.dddh

我的目的是要把表gprk_2,的入库数量(sl),按单号(dddh),品名(pmgg),颜色(color),单位(dw)来和计。然后在算出gpck_2的出库总数量。条件是和gprk_2的单号,品名,颜色一样的。里面还有一些时间条件。但是我用上面那样写它会出现一个情况就是只要
GROUP BY gprk_2.dddh, gprk_2.pmgg, gprk_2.color, 有两条或两条以上的记录它的sum(sl)的值就会比实际的大两倍。这是为什么啊。要怎么改或是要怎么样写才正确啊。
 
入库的
单号 品名 颜色 单位 数量 日期这里忽略
B1-38173 9315-60-150 黑色 KG 187.00
B1-38173 9315-60-150 红色 KG 167.40
B1-38173 9315-60-150 灰兰 KG 35.00
B1-38173 9315-60-150 黑色 KG 13.00
出库的
B1-38173 9315-60-150 黑色 KG 100.00
B1-38173 9315-60-150 红色 KG 100.40
B1-38173 9315-60-150 灰兰 KG 35.00
B1-38173 9315-60-150 黑色 KG 30.00
和计(用上面的语句统计出来的结果会变成这样请问这是为什么啊。要怎么改啊)
单号 品名 颜色 单位 总的入库数量 总的出库数量
B1-38173 9315-60-150 黑色 KG 400.00(实际应为200)60.00(实际应为30)
B1-38173 9315-60-150 红色 KG 167.40 100.00
B1-38173 9315-60-150 灰兰 KG 35.00 35.00
 
你的问题太长了,晕!
 
是因爲,你的關聯是一對多,也就是關聯條件不是每個表的主健。
至於怎樣寫,恐怕你要分開求總了。
 
你把这段sql语句格式化一下,这样看起来真是有些晕。
 
SELECT gprk_2.dddh, gprk_2.pmgg, gprk_2.color, gprk_2.dw,
SUM(isnull(gprk_2.sl,0)) AS rsl, SUM(isnull(gpck_2.sl,0)) AS csl
FROM gprk_2 left OUTER JOIN gpck_2 ON gprk_2.dddh = gpck_2.dddh
AND gprk_2.pmgg = gpck_2.pmgg AND gprk_2.color = gpck_2.color
WHERE (gprk_2.zt = 'zcc') AND (YEAR(gprk_2.rq) = YEAR(GETDATE())) AND (MONTH
(gprk_2.rq) >= 9) AND (gprk_2.dh <> '') AND
(30 <= DATEDIFF(dd,gprk_2.rq, GETDATE()))
GROUP BY gprk_2.dddh, gprk_2.pmgg, gprk_2.color, gprk_2.dw
ORDER BY gprk_2.dddh
 
是VFP程序吧,
 
去掉时间的条件就是这样的.
SELECT gprk_2.dddh, gprk_2.pmgg, gprk_2.color, gprk_2.dw, SUM(gprk_2.sl) AS rsl,
SUM(gpck_2.sl) AS csl
FROM gprk_2 LEFT OUTER JOIN
gpck_2 ON gprk_2.dddh = gpck_2.dddh AND gprk_2.pmgg = gpck_2.pmgg AND
gprk_2.color = gpck_2.color AND gpck_2.zt = 'zcc'
GROUP BY gprk_2.dddh, gprk_2.pmgg, gprk_2.color, gprk_2.dw
ORDER BY gprk_2.dddh
 
问题解决了。谢谢大家
下面是我重新写的
SELECT dddh, pmgg,color, dw, SUM(sl) AS cksl,
(select sum(sl) from gprk_2 where dddh = gpck_2.dddh AND pmgg = gpck_2.pmgg AND
color = gpck_2.color and zt='zcc') as rksl,(sum(sl)-(select sum(sl) from gprk_2 where dddh = gpck_2.dddh AND pmgg = gpck_2.pmgg AND
color = gpck_2.color and zt='zcc')) as xcsl
FROM gpck_2
WHERE (gpck_2.zt = 'zcc') AND gpck_2.rq >= '2003-09-01' AND gpck_2.rq <='2003-11-30'
GROUP BY gpck_2.dddh, gpck_2.pmgg, gpck_2.color, gpck_2.dw
ORDER BY gpck_2.dddh
 
后退
顶部