sql >> Databáze >  >> RDS >> Sqlserver

Jak vytvořím souhrn připojením k jedné tabulce se serverem SQL?

Za předpokladu, že používáte SQL Server 2005 nebo vyšší, zde je kód:

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 )

To bude fungovat bez ohledu na to, kolik různých stavů máte. Dynamicky sestavuje dotaz pomocí PIVOT .

Aktualizovat

Jak zdůraznil @JonH, v kódu, který jsem zveřejnil, byla zranitelnost, která umožnila útok injekcí. To je nyní opraveno pomocí QUOTENAME při vytváření názvů sloupců.

Další příklady:



  1. Jak zvýšit čítač a vrátit hodnotu v MySQL

  2. Zřetězit/sloučit hodnoty pole během seskupování/agregace

  3. Dynamický rozbalovací seznam PHP MySQL

  4. MYSQL - Přesunout data z jedné tabulky do související?