Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak zbudować podsumowanie, łącząc się z pojedynczą tabelą za pomocą programu SQL Server?

Zakładając, że używasz SQL Server 2005 lub nowszego, oto kod:

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 )

Będzie to działać bez względu na to, ile masz różnych statusów. Dynamicznie składa zapytanie z PIVOT .

Aktualizacja

Jak zauważył @JonH, w opublikowanym przeze mnie kodzie była luka, która umożliwiała atak typu injection. Zostało to naprawione za pomocą NAZWA WYWAŻENIA podczas tworzenia nazw kolumn.

Inne przykłady:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie SQL dla łańcucha rodzic-dziecko

  2. Zmień tryb podejrzany bazy danych SQL na tryb normalny za pomocą zapytania

  3. Jak mogę zablokować tabelę podczas odczytu przy użyciu Entity Framework?

  4. Jak sprawdzić ustawienie ANSI_NULLS sesji w SQL Server?

  5. Time DataType w SQL Server 2005