【发布时间】:2016-03-18 12:31:14
【问题描述】:
我已经坚持了一段时间了,我一生都无法理解为什么 SQL 没有完成我想要的。这看起来很简单,我知道这很简单,但我无法得到正确的数字。
我有一些代码可以从我们数据库的连接表中提取数据,显示客户编号、购买的产品、购买日期以及该产品线的产品价格和数量。当我在日期和按日期分组之间设置时,它可以完美运行并提取所有正确的信息。
我想要的是按产品分组,将每个客户在某个日期范围内购买的产品数量相加。当我尝试求和(SIL.ILQTY)时,总和超过calcualtes这个值......我已经尝试过Sum with CASE,它也失败了。我有下面的代码并过滤了记录以简化测试,因此只显示一种产品和一个客户,该产品有 7 个购买日期。
以下代码按日期显示有效的记录:
SELECT SIH.SICUST, SIL.ILPROD, date(SIL.ILDATE), SIL.ILNET, SIL.ILQTY,
SIL.ILQTY*SIL.ILNET, SIH.SICUST || ' ' || rtrim(SIL.ILPROD) || ' '
FROM NWBAKERS.BPCSF.IIM IIM,
NWBAKERS.BPCSF.SIH SIH,
NWBAKERS.BPCSF.SIL SIL
WHERE SIH.SIINVN = SIL.ILINVN
AND IIM.IPROD = SIL.ILPROD
AND ((date(SIL.ILDATE) between '02/01/2016' and '02/29/2016'))
and SIL.ILWHS ='PR'
and SIL.ILQTY > '0'
and SIH.SICUST = '40634'
and SIL.ILPROD = '81039'
GROUP BY SIH.SICUST, SIL.ILPROD, date(SIL.ILDATE), SIL.ILQTY, SIL.ILNET
问题是当我从 group by 语句中删除日期(SIL.ILDATE)并在 select 语句中求和(SIL.ILQTY)以获得购买独特产品总数的唯一客户编号(ILQTY ) 在指定的日期范围内。
谁能指点我正确的方向????
上面的示例数据图像:
在 select 语句中从 Group by 和 sum(ILQTY) 中删除了 Date 的数据:
【问题讨论】:
-
我删除了 sql-server 标签,因为语法显然不是 SQL Server。
-
将大部分(日期/修剪/等)移动到派生表中,在主级别执行分组。
-
显示数据示例、所需输出和您得到的错误输出。
-
只是为了确保...如果您从 group by 语句中删除 date(SIL.ILDATE) 您还必须将其从 SELECT 列表中删除。如果您在 select 语句中求和(SIL.ILQTY),则还必须将其从 GROUP BY 中删除
-
感谢您的回复,我已经看到一个发票编号下可以有多个订单,这会在同一日期为 QTY 生成重复值。这就是为什么我的 sum 函数失败(按照我想要的方式)并且多算了 Products 的数量.......我需要以不同的方式加入吗?我添加了我首先得到的数据,我想要什么,以及在删除组中的日期并使用 sum(ILQTY) 后不正确的地方
标签: sql db2 ibm-midrange sumifs