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

Transponování řádků do sloupců v SQL Server 2005

Budete muset provést PIVOT . Existují dva způsoby, jak toho dosáhnout pomocí PIVOT, buď Statický Pivot, kde kódujete sloupce, které se mají transformovat, nebo Dynamic Pivot, který určuje sloupce při provádění.

Statické pivotování:

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

Viz SQL Fiddle s ukázkou

Dynamický pivot:

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)

Viz SQL Fiddle s ukázkou

Pokud nechcete použít PIVOT pak můžete provést podobný typ dotazu pomocí CASE prohlášení:

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

Viz SQL Fiddle s ukázkou



  1. MySQL serveru dochází paměť nebo se nespustí

  2. Jak upravit podřetězce?

  3. Databáze MySQL přeruší připojení po 8 hodinách. Jak tomu předejít?

  4. Vysvětlení MySqlBulkLoader