sql >> Database teknologi >  >> RDS >> Sqlserver

TSQL OVER-klausul:COUNT(*) OVER (ORDER BY a)

Det giver en løbende total (denne funktionalitet blev ikke implementeret i SQL Server før version 2012 .)

ORDER BY definerer vinduet, der skal aggregeres med UNBOUNDED PRECEDING og CURRENT ROW som standard, når det ikke er angivet. SQL Server er som standard den mindre velfungerende RANGE mulighed i stedet for ROWS .

De har forskellig semantik i tilfælde af bindinger, idet vinduet for RANGE version inkluderer ikke kun den aktuelle række (og foregående rækker), men også eventuelle yderligere bundne rækker med samme værdi af a som den aktuelle række. Dette kan ses i antallet af rækker, der er talt af hver i resultaterne nedenfor.

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;

Returnerer

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

For at opnå det resultat, som du forventede at få, udelad begge PARTITION BY og ORDER BY og brug en tom OVER() klausul (også vist ovenfor).



  1. Sådan får du stien til en hierarkitabel

  2. Er fremmednøgler virkelig nødvendige i et databasedesign?

  3. Hvordan kan jeg indsætte arabisk ord i mysql-databasen ved hjælp af java

  4. Anslået antal rækker, der skal læses