SQL Sumif 函数/GROUP BY & SUM?

SQL Sumif functions / GROUP BY & SUM?

我已经坚持了一段时间了,我无法理解为什么 SQL 没有达到我想要的效果。这看起来很简单,我知道这很简单,但我找不到正确的数字。

我有一些代码可以从我们数据库中的连接表中提取数据,显示客户数量、购买的产品、购买日期以及该产品系列的产品价格和数量。当我按日期在日期和 GROUP 之间设置时,它可以完美地工作并提取所有正确的信息。

我想要的是按产品GROUP,汇总每个客户在一个日期范围内购买的产品数量。当我尝试对 sum(SIL.ILQTY) 计算这个值的总和时......我尝试用 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 语句中删除 date(SIL.ILDATE) 并在 select 语句中删除 sum(SIL.ILQTY) 以获得唯一客户编号时在指定的日期范围内购买了独特产品的总数 (ILQTY)。

谁能给我指出正确的方向????

上面的示例数据图像:

在 select 语句中从 Group by 和 sum(ILQTY) 中删除日期的数据:

Desired result for one product by customer

Image shows the added fields for invoice number and order number, giving duplicate lines for date/quantity/invoice as order number are different. The sum of these qty values is what my SQL code was summing previously.

如果您想知道单个数量/价格是您的客户的多少倍,并且想要总价值,您可以尝试这样的方法

 SELECT SIH.SICUST, SIL.ILPROD, date(SIL.ILDATE), SIL.ILNET, SIL.ILQTY,
    sum(SIL.ILQTY)*sum(SIL.ILNET) as TotalValue, count(*) as HowManyTimes,
    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, SIL.ILDATE, SIL.ILQTY, SIL.ILNET

抱歉没试过..

我找到了一种方法来让它工作,与我想象的有点不同,但它工作得很好并且 return 完美的信息......感谢所有试图帮助解决这个问题的人!

SELECT T.SICUST, T.ILPROD, SUM(Quantity) as Num_Products 
FROM
(
SELECT SIH.SICUST, SIL.ILPROD, SIL.ILNET, MAX(SIL.ILQTY) as Quantity
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, SIL.ILNET, SIL.ILINVN
) AS T
GROUP BY T.SICUST, T.ILPROD

问题是我们表中的重复行是因为在同一个发票 ID 上有多个订单,我从中获取最大值,然后在按语句删除组中的日期后对这些值求和。希望其他人会觉得这很有用!