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
Другие вопросы по тегам