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

Транспониране на редове в колони в SQL Server 2005

Ще трябва да извършите PIVOT . Има два начина да направите това с PIVOT, или Статичен Pivot, където кодирате колоните за трансформиране, или Dynamic Pivot, който определя колоните при изпълнение.

Статична осова точка:

SELECT *
FROM
(
    SELECT col1, col2
    FROM yourTable
) x
PIVOT
(
   min(col2)
   for col1 in ([A], [B], [C])
)p

Вижте SQL Fiddle с демонстрация

Динамична осова точка:

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

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(col1) 
                    from t1
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT ' + @cols + ' from 
             (
                select col1, col2
                from t1
            ) x
            pivot 
            (
                min(col2)
                for col1 in (' + @cols + ')
            ) p '

execute(@query)

Вижте SQL Fiddle с демонстрация

Ако не искате да използвате PIVOT функция, тогава можете да извършите подобен тип заявка с CASE изявления:

select 
  SUM(CASE WHEN col1 = 'A' THEN col2 END) as A,
  SUM(CASE WHEN col1 = 'B' THEN col2 END) as B,
  SUM(CASE WHEN col1 = 'C' THEN col2 END) as C
FROM t1

Вижте SQL Fiddle с демонстрация



  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 сървър TOP IO заявка -2

  2. Оптимизиран SQL за дървовидни структури

  3. Могат ли SQLExpress 2005 и 2008 да бъдат инсталирани на една и съща машина без проблем?

  4. Оценяване на материалните запаси „първо влязло, първо излязло“ (FIFO).

  5. PIVOT Заявка за множествено присъединяване