Potrzebuję pomocy z funkcjami okienkowania.Funkcja Windowing programu SQL Server 2012 do obliczania sumy całkowitej
Ostatnio korzystałem z funkcji sql 2012 windowing. Wiem, że możesz obliczyć sumę w oknie i sumę bieżącą w oknie. Ale zastanawiałem się; czy możliwe jest obliczenie poprzedniej sumy roboczej, tj. sumy całkowitej bez uwzględnienia bieżącego wiersza? Zakładam, że musiałbyś użyć argumentu ROW lub RANGE i wiem, że istnieje opcja CURRENT ROW, ale potrzebowałbym CURRENT ROW - I, która jest nieprawidłową składnią. Moja wiedza na temat argumentów ROW i RANGE jest ograniczona, więc każda pomoc zostanie z wdzięcznością przyjęta.
Wiem, że istnieje wiele rozwiązań tego problemu, ale staram się zrozumieć argumenty ROW, RANGE i zakładam, że problem może być z nimi pęknięty. Zawarłem jeden możliwy sposób obliczenia poprzedniej sumy, ale zastanawiam się, czy istnieje lepszy sposób.
USE AdventureWorks2012
SELECT s.SalesOrderID
, s.SalesOrderDetailID
, s.OrderQty
, SUM(s.OrderQty) OVER (PARTITION BY SalesOrderID) AS RunningTotal
, SUM(s.OrderQty) OVER (PARTITION BY SalesOrderID
ORDER BY SalesOrderDetailID) - s.OrderQty AS PreviousRunningTotal
-- Sudo code - I know this does not work
--, SUM(s.OrderQty) OVER (PARTITION BY SalesOrderID
-- ORDER BY SalesOrderDetailID
-- ROWS BETWEEN UNBOUNDED PRECEDING
-- AND CURRENT ROW - 1)
-- AS SudoCodePreviousRunningTotal
FROM Sales.SalesOrderDetail s
WHERE SalesOrderID IN (43670, 43669, 43667, 43663)
ORDER BY s.SalesOrderID
, s.SalesOrderDetailID
, s.OrderQty
góry dzięki
proszę nie przechodzą na stanowiska administratorów baz danych, zarówno [] (http://dba.stackexchange.com/questions/42985/sql-windowing-function-to-create- a-running-total) i tutaj, chyba że odpowiedź może różnić się od perspektywy programistów w stosunku do dba. –