none
TSQL Предложение OVER неожиданное поведение RRS feed

  • Вопрос

  • Предположим у нас есть тестовая таблица:

    CREATE TABLE OrderDetails(

           OrderId int,

           ProductName nvarchar(50),

           Quantity int,

           Price int);

    GO

    INSERT INTO OrderDetails VALUES (1,'Sugar',10,10);

    INSERT INTO OrderDetails VALUES (1,'Tea',1,25);

    INSERT INTO OrderDetails VALUES (1,'Coffee',3,40);

     

    INSERT INTO OrderDetails VALUES (2,'Coffee',1,50);

     

    INSERT INTO OrderDetails VALUES (3,'Tea',100,19);

    INSERT INTO OrderDetails VALUES (3,'Coffee',100,29);


    Выполнив следующий запрос я получаю вполне ожидаемый результат:

    SELECT *,

           SUM(Quantity) OVER (ORDER BY OrderId ROWS BETWEEN CURRENT ROW AND 9999 FOLLOWING) TotalQuantity

    FROM OrderDetails

    OrderId     ProductName                                        Quantity    Price       TotalQuantity
    ----------- -------------------------------------------------- ----------- ----------- -------------
    1           Sugar                                                           10          10          215
    1           Tea                                                               1           25          205
    1           Coffee                                                          3           40          204
    2           Coffee                                                          1           50          201
    3           Tea                                                             100         19          200
    3           Coffee                                                        100         29          100

    (6 row(s) affected)

    Но если я использую UNBOUNDED FOLLOWING, то результат абсолютно иной, хотя на мой взгляд должен быть идентичным.

    SELECT *,

           SUM(Quantity) OVER (ORDER BY OrderId ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) TotalQuantity

    FROM OrderDetails

    OrderId     ProductName                                        Quantity    Price       TotalQuantity
    ----------- -------------------------------------------------- ----------- ----------- -------------
    3           Tea                                                             100         19          100
    3           Coffee                                                         100         29          200
    2           Coffee                                                         1             50          201
    1           Sugar                                                          10           10          211
    1           Tea                                                             1             25           212
    1           Coffee                                                         3             40          215

    (6 row(s) affected)

    Прошу, по возможности, разъяснить мне мою ошибку.

    Спасибо.




    Александр Кобелев : Мой блог

    Последние статьи:
    Использование PDF шаблонов C#
    Использование WORD шаблонов C# 4.0

    Буду рад новым читателям и комментариям.



    • Изменено Megano 26 марта 2013 г. 12:58
    26 марта 2013 г. 12:47

Ответы