sql >> Database >  >> RDS >> Sqlserver

SQL:Real transponeren

Ik weet niet zeker waarom je denkt dat je dit niet kunt bereiken met een UNPIVOT en een PIVOT :

select [1], [2], [3], [4], [5]
from 
(
  select *
  from
  (
    select col1, col2, col3,
      row_number() over(order by col1) rn
    from yourtable
  ) x
  unpivot
  (
    val for col in (col1, col2, col3)
  ) u
) x1
pivot
(
  max(val)
  for rn in ([1], [2], [3], [4], [5])
) p

Zie SQL Fiddle met demo . Indien nodig kan dit ook dynamisch worden uitgevoerd.

Bewerken, als de kolomvolgorde behouden moet blijven, dan kun je zoiets als dit gebruiken, waarbij de row_number() wordt toegepast zonder een order by . te gebruiken op een van de kolommen in uw tabel (hier is een artikel over het gebruik van niet-deterministische rijnummers ):

select [1], [2], [3], [4], [5]
from 
(
  select *
  from
  (
    select col1, col2, col3,
      row_number() 
        over(order by (select 1)) rn
    from yourtable
  ) x
  unpivot
  (
    val for col in (col1, col2, col3)
  ) u
) x1
pivot
(
  max(val)
  for rn in ([1], [2], [3], [4], [5])
) p;

Zie SQL Fiddle met demo




  1. Slaapstand - ClassNotFoundException:com.mysql.jdbc.Driver

  2. De grootte van tabellen bepalen in Oracle

  3. DB-besturing nadert zijn dood

  4. Hibernate door overbodige queries naar de database te sturen