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

Hodnoty řádků SQL Serveru jako názvy sloupců kontingenční tabulka?

Můžete to provést pomocí PIVOT funkce. Pokud znáte hodnoty, které chcete převést na sloupce, můžete je natvrdo zakódovat pomocí statického pivotu:

select *
from 
(
  select dept, emp_id, emp_name, p_date, hours_worked
  from table1
) x
pivot
(
  max(hours_worked)
  for p_date in ([2012-10-19], [2012-10-20], [2012-10-21])
) p

Viz SQL Fiddle s ukázkou

Pokud máte neznámý počet hodnot, můžete použít dynamické sql k PIVOT údaje:

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

select @cols = STUFF((SELECT distinct ',' 
                        + QUOTENAME(convert(char(10), p_date, 120)) 
                    from table1
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT dept, emp_id, emp_name,' + @cols + ' from 
             (
                select dept, emp_id, emp_name, p_date, hours_worked
                from table1
            ) x
            pivot 
            (
                max(hours_worked)
                for p_date in (' + @cols + ')
            ) p '

execute(@query)

Viz SQL Fiddle s ukázkou




  1. Jak zvýšit rychlost dotazu?

  2. PHP a MySQL nejlepší způsob, jak počítat zobrazení stránek pro dynamické stránky

  3. Problém s programem Java a připojením k MySQL:Nebyl nalezen žádný vhodný ovladač

  4. Jak získat velikosti tabulek databáze MySQL?