Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Klauzula TSQL OVER:COUNT(*) OVER (ORDER BY a)

Daje bieżącą sumę (ta funkcja nie została zaimplementowana w SQL Server do wersja 2012 .)

ORDER BY definiuje okno do agregacji z UNBOUNDED PRECEDING i CURRENT ROW jako domyślne, gdy nie określono. SQL Server domyślnie jest mniej wydajny RANGE zamiast ROWS .

W przypadku remisów mają one różną semantykę, w tym okno dla RANGE wersja zawiera nie tylko bieżący wiersz (i poprzednie wiersze), ale także wszelkie dodatkowe powiązane wiersze o tej samej wartości a jako bieżący wiersz. Widać to po liczbie wierszy zliczonych przez każdy z nich w poniższych wynikach.

SELECT  a, 
        b,
        COUNT(*) OVER (ORDER BY a 
                         ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS  [Rows],
        COUNT(*) OVER (ORDER BY a 
                         RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS [Range],
        COUNT(*) OVER() AS [Over()]
    FROM    t;

Zwroty

a        b        Rows        Range       Over()
-------- -------- ----------- ----------- -----------
NULL     NULL     1           4           12
NULL     NULL     2           4           12
NULL     NULL     3           4           12
NULL     NULL     4           4           12
a        b        5           7           12
a        b        6           7           12
a        b        7           7           12
c        d        8           11          12
c        d        9           11          12
c        d        10          11          12
c        d        11          11          12
e        NULL     12          12          12

Aby osiągnąć oczekiwany wynik, pomiń oba PARTITION BY i ORDER BY i użyj pustej OVER() klauzula (również pokazana powyżej).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wykorzystać zmienną do nazwy bazy danych w T-SQL?

  2. T-SQL, aby wyświetlić wszystkie mapowania użytkowników z rolami/uprawnieniami bazy danych dla logowania

  3. Jak wybrać ostatni rekord tabeli w SQL?

  4. Jak porównać ten sam DB pod kątem ich schematu i tabel?

  5. Kod VBA, aby dodać połączoną tabelę z kluczem podstawowym