Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Zählung der Vorkommen

Der einfachste (und wahrscheinlich effizienteste) Ansatz ist die Verwendung von ROW_NUMBER() :

SELECT [Date], Code, [Count] = ROW_NUMBER() OVER (PARTITION BY Code ORDER BY [Date])
 FROM dbo.YourTableName
 ORDER BY [Date];

Zum Spaß können Sie es auch in SQL Server 2012 auf diese Weise lösen. Wenn Date ist einzigartig:

SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
  RANGE UNBOUNDED PRECEDING)
 FROM dbo.YourTable
 ORDER BY [Date];

Oder einfacher:

SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date])
 FROM dbo.YourTable
 ORDER BY [Date];

Wenn Date ist nicht eindeutig, und wenn Sie keine Bindungen wollen (gleiche Anzahl für identische Kombinationen von Datum+Code), müssen Sie die teureren ROWS verwenden , die auf dem Spool auf der Festplatte verwendet:

SELECT [Date], Code, [Count] = COUNT(*) OVER (PARTITION BY Code ORDER BY [Date]
  ROWS UNBOUNDED PRECEDING)
 FROM dbo.YourTable
 ORDER BY [Date];

Sie können jede dieser Optionen an Ihrem Tisch ausprobieren, um zu sehen, wie die Leistung ist.