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

Wie erstelle ich eine Zusammenfassung, indem ich mit SQL Server einer einzelnen Tabelle beitrete?

Angenommen, Sie verwenden SQL Server 2005 oder höher, hier ist der Code:

DECLARE @cols VARCHAR(1000)
DECLARE @sqlquery VARCHAR(2000)

SELECT  @cols = STUFF(( SELECT distinct  ',' + QuoteName(cast([status] as varchar))
                        FROM LogTable FOR XML PATH('') ), 1, 1, '') 


SET @sqlquery = 'SELECT * FROM
      (SELECT UserIndex,  [status]
       FROM LogTable ) base
       PIVOT (Count(status) FOR [status]
       IN (' + @cols + ')) AS finalpivot'

EXECUTE ( @sqlquery )

Dies funktioniert unabhängig davon, wie viele verschiedene Status Sie haben. Es stellt dynamisch eine Abfrage mit PIVOT zusammen .

Aktualisieren

Wie @JonH betonte, gab es in dem von mir geposteten Code eine Schwachstelle, die einen Injection-Angriff ermöglichte. Dies wird jetzt behoben, indem QUOTENAME verwendet wird bei der Bildung der Spaltennamen.

Weitere Beispiele: