Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да създам резюме, като се присъединя към една таблица с SQL Server?

Ако приемем, че използвате SQL Server 2005 или по-нова версия, ето кодът:

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 )

Това ще работи независимо колко различни статуса имате. Той динамично събира заявка с PIVOT .

Актуализация

Както @JonH посочи, имаше уязвимост в кода, който публикувах, което направи възможна атака чрез инжектиране. Това вече е коригирано с помощта на QUOTENAME при формирането на имената на колоните.

Други примери:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как работи функцията за преобразуване на SQL при преобразуване на datetime в float?

  2. SQL рекурсивен CTE:Намиране на обекти, свързани по свойство

  3. Как да създам потребител в SQL-Server, който има достъп само до една таблица и може да вмъква само редове

  4. sql география към dbgeography?

  5. Как да прехвърлям изчислена колона с правилен десетичен/$ резултат