SQL OVER Run Total Выберите одну запись
Я пытаюсь использовать OVER
Пункт, чтобы вернуть один ряд. Мой код выглядит следующим образом:
SELECT SUM(Price) OVER (ORDER BY [InvoiceID] ROWS UNBOUNDED PRECEDING)
FROM dbo.Sales
WHERE InvoiceID = 3427
Я хочу вернуться:
InvoiceID Price
3427 15.00
Вместо этого возвращается:
InvoiceID Price
3427 5.00
3427 10.00
3427 15.00
Как мне получить только один ряд?
2 ответа
Не уверен, почему вы используете OVER()
пункт. Кажется, вам просто нужно:
SELECT InvoiceID, Price = SUM(Price)
FROM dbo.Sales
WHERE InvoiceID = 3427 -- maybe you want more than just this one?
-- if so, leave out the WHERE clause
GROUP BY InvoiceID;
На самом деле спецификация окна в предложении OVER состоит из трех основных частей: разбиение, упорядочение и кадрирование. Предложение оконного фрейма (ROWS BETWEEN AND) фильтрует фрейм или подмножество строк из оконного раздела между двумя указанными разделителями. В вашем запросе фрейм не указан правильно, он должен быть как между началом раздела (т.е. UNBOUNDED PRECEDING), так и текущей строкой (CURRENT ROW). Следующий запрос должен помочь:
SELECT SUM(Price) OVER (ORDER BY [InvoiceID] ROWS BETWEEN UNBOUNDED PRECEDING
AND CURRENT ROW)
FROM dbo.Sales
WHERE InvoiceID = 3427