首页 > 解决方案 > Somar um valor total e retornar muitas linhas

问题描述

我有两个表(订单标题和订单行)。我想添加订单行,按月和年分组,但它给我带来了所有订单的所有行。你有办法总结吗?

这可能是因为我每行进行一次计算。我需要每行都这样做,因为库存来自几个不同的地方。例如,一只股票来自后街,另一只股票来自另一个街区。如果我使用销售订单的总折扣,如果库存来自不同的地方,它会使同一订单翻倍。如果我使用计算来制作每行折扣,它将逐行带来(当然)。还有其他可能吗?我尝试使用变量,但我不能在同一个变量上传递多个值。

SELECT   
    MONTH(X.DOCDATE) MES,
    YEAR(X.DOCDATE) ANO,
    (100 - X.DiscPrcnt)* SUM(LineTotal) /100 as 'TOTAL'  
FROM RDR1 INNER JOIN ORDR X ON RDR1.DocEntry = X.DocEntry 
WHERE X.CANCELED <> 'Y'
      AND X.DocTotal > 0 
      AND X.DocDate BETWEEN '20140101' AND '20190630' 
      AND OcrCode IN ('EXT', 'EXT-JD')
Group by 
    X.DOCDATE, 
    X.DiscPrcnt
ORDER BY X.DOCDATE

我希望它是:

Month YEAR Total
1     2014  5000
2     2014  7000

标签: sqlgroup-by

解决方案


我想你想按月份和年份而不是完整日期分组。另外,我认为您可能不希望每个折扣百分比值都有单独的行,对吗?

这个查询怎么样?:-

SELECT   
    MONTH(X.DOCDATE) MES,
    YEAR(X.DOCDATE) ANO,
    SUM((100 - X.DiscPrcnt)* X.LineTotal/100)  as 'TOTAL'  
FROM RDR1 INNER JOIN ORDR X ON RDR1.DocEntry = X.DocEntry 
WHERE X.CANCELED <> 'Y'
      AND X.DocTotal > 0 
      AND X.DocDate BETWEEN '20140101' AND '20190630' 
      AND OcrCode IN ('EXT', 'EXT-JD')
Group by 
    YEAR(X.DOCDATE),
    MONTH(X.DOCDATE)
ORDER BY
    YEAR(X.DOCDATE),
    MONTH(X.DOCDATE)


推荐阅读