索马里的英勇共谋

时间:2019-07-17 19:32:10

标签: sql group-by

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

这可能是因为我每行进行一次计算。 我需要每行执行一次,因为库存来自几个不同的地方。 例如,一个库存来自后街,另一库存来自另一街区。 如果我使用总折扣作为销售订单,则在库存来自不同地方的情况下,它将使同一订单翻倍。 如果我使用该计算法来对每行进行折扣,它将逐行带来(肯定)。 还有其他可能性吗? 我尝试使用变量,但不能在同一变量上传递多个值。

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

1 个答案:

答案 0 :(得分:0)

我想您想按月和年而不是整个日期分组。另外,我认为您可能不想为每个折扣百分比值单独添加一行吗?

该查询如何?:-

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)