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

Hvordan opbygger jeg en oversigt ved at slutte mig til en enkelt tabel med SQL Server?

Forudsat at du bruger SQL Server 2005 eller nyere, her er koden:

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 )

Dette vil virke uanset hvor mange forskellige status du har. Den samler dynamisk en forespørgsel med PIVOT .

Opdater

Som @JonH påpegede, var der en sårbarhed i den kode, jeg postede, som muliggjorde et injektionsangreb. Dette er nu rettet ved at bruge QUOTENAME når kolonnenavnene dannes.

Andre eksempler:



  1. Valg af alle poster ved hjælp af SQL LIMIT og OFFSET-forespørgsel

  2. PHP-formular returnerer Bemærk:Konvertering af matrix til streng

  3. Sådan hentes data fra mysql-databasen

  4. MySQL-ydelse:JOIN ON vs WHERE