在SQL Server 2014中使用OVER创建运行tot

时间:2017-09-26 19:15:08

标签: sql sql-server

在SQL Sever 2014中,我想创建一个带有分区运行总计的列,但我无法让它工作。这就是我所拥有的:

SELECT 
    a.ArtikelCode
    ,a.Omschrijving
    ,o.OrderNr
    ,o.Datum
    ,r.ProdItem
    ,o.Aantal
    ,(SUM(Aantal) OVER(PARTITION BY r.ProdItem ORDER BY r.ProdItem ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)) AS Telling
FROM Artikel a
LEFT JOIN Receprt r ON r.ReqItem = a.ArtikelCode
LEFT JOIN [Order] o ON o.ArtikelCode = r.ProdItem
WHERE LEFT(a.ArtikelCode,1) = 'M'
GROUP BY r.ProdItem, o.ArtikelCode, a.ArtikelCode, o.Datum, o.Aantal, a.Omschrijving, o.OrderNr
ORDER BY a.ArtikelCode, r.ProdItem, o.datum

这给了我以下结果: enter image description here

正如您所看到的,“Telling”列在“Aantal”列上进行了总结。对于ArtikelCode“M01”和ProdItem“ART01”表现不错。但在创纪录的8,它仍在总结。我想要的是它在记录8中以2开始,并且在记录9中它应该是3并且在记录10中,“Telling”列中的总和应该是10

1 个答案:

答案 0 :(得分:0)

认为您还希望按ArtikelCode进行分区。我想你打算按datum订购。 。 。并且rows子句是不需要的,因为它默认存在:

 SUM(Aantal) OVER (PARTITION BY a.ArtikelCode, r.ProdItem
                   ORDER BY o.datum
                  ) as Telling