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

Как да създадете обобщена таблица в Transact/SQL?

Трябва да използвате PIVOT . Можете да използвате или СТАТИЧНА ОСВЕТНА, където знаете стойностите на колоните за трансформиране, или ДИНАМИЧНА ОСНОВНА, където колоните са неизвестни до момента на изпълнение.

Статична осова точка (Вижте SQL Fiddle с демонстрация ):

select *
from 
(
    select memid, Condition_id, Condition_Result
    from t
) x
pivot
(
    sum(condition_result)
    for condition_id in ([C1], [C2], [C3], [C4])
) p

Динамична ос (Вижте SQL Fiddle с демонстрация ):

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.condition_id) 
            FROM t c
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')


set @query = 'SELECT memid, ' + @cols + ' from 
            (
                select MemId, Condition_id, condition_result
                from t
           ) x
            pivot 
            (
                sum(condition_result)
                for condition_id in (' + @cols + ')
            ) p '


execute(@query)

И двете ще генерират едни и същи резултати.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. C# SQLServer извлича резултати и ги поставя във формат .csv

  2. Как да променя SQL Server 2005 така, че да е чувствителен към главни букви?

  3. Име на колона като параметър в оператор INSERT

  4. Кой е най-добрият начин за обработка и импортиране на голям csv (500k записа) на SQL сървър с помощта на Vbscript?

  5. SQL Server Log Shipping &Disaster Recovery Installation and Configuration -2