wich rozwiązanie SQL łączy „Wierszy MIĘDZY nieograniczona poprzedzające i bieżący wiersz” i „Suma” zrobił dokładnie to, co chciałem osiągnąć. Dziękuję bardzo!
Jeśli to może pomóc każdemu, oto moja sprawa. Chciałem kumulować +1 w kolumnie, gdy twórca zostanie znaleziony jako "Some Maker" (przykład). Jeśli nie, brak przyrostu, ale wynik poprzedniej inkrementacji.
Więc ten kawałek SQL:
SUM(CASE [rmaker] WHEN 'Some Maker' THEN 1 ELSE 0 END)
OVER
(PARTITION BY UserID ORDER BY UserID,[rrank] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS Cumul_CNT
dozwolone żebym coś takiego:
User 1 Rank1 MakerA 0
User 1 Rank2 MakerB 0
User 1 Rank3 Some Maker 1
User 1 Rank4 Some Maker 2
User 1 Rank5 MakerC 2
User 1 Rank6 Some Maker 3
User 2 Rank1 MakerA 0
User 2 Rank2 SomeMaker 1
Wyjaśnienie powyżej: Zaczyna się liczyć z "pewnym maker" 0, Some Maker zostanie znaleziony, a my wykonamy +1. W przypadku użytkownika 1 znajduje się MakerC, więc nie robimy +1, ale zamiast tego liczba pionków niektórych twórców wynosi 2 do następnego rzędu. Partycjonowanie jest według użytkownika, więc po zmianie użytkownika łączna liczba wraca do zera.
Jestem w pracy, nie chcę żadnych zasług na tę odpowiedź, po prostu powiedz dziękuję i pokaż mój przykład na wypadek, gdyby ktoś znalazł się w takiej samej sytuacji. Próbowałem połączyć SUMA i PARTYCJĘ, ale niesamowita składnia "ROWS MIĘDZY UNBOUNDED PRECEDING AND CURRENT ROW" zakończyła zadanie.
Dzięki! Groaker
Uzyskiwanie sum ogólnych w T-SQL nie jest trudne, istnieje wiele poprawnych odpowiedzi, większość z nich jest całkiem łatwa. Co nie jest łatwe (a nawet możliwe w tym momencie) jest napisanie prawdziwego zapytania w T-SQL, aby wydajne sumy uruchomione. Wszystkie są O (n^2), choć mogą być łatwo O (n), z tym wyjątkiem, że T-SQL nie optymalizuje dla tego przypadku. Możesz uzyskać O (n) za pomocą kursorów i/lub pętli While, ale wtedy używasz kursorów. (* blech! *) – RBarryYoung