sql >> Database teknologi >  >> RDS >> Sqlserver

SQL:Real Transpose

Jeg er usikker på, hvorfor du tror, ​​du ikke kan opnå dette med en UNPIVOT og en 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

Se SQL Fiddle with Demo . Dette kan også udføres dynamisk, hvis det er nødvendigt.

Rediger, hvis kolonnerækkefølgen skal bevares, så kan du bruge noget som dette, som anvender row_number() uden at bruge en order by på en af ​​kolonnerne i din tabel (her er en artikel om at bruge ikke-deterministiske rækkenumre ):

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;

Se SQL Fiddle with Demo




  1. Brug af tidslinje google chart api med php - DataTable-initialisering

  2. MySQLdb fejl lokal variabel refereret før tildeling (anderledes end normalt)

  3. Data tutorial:Brug af vinduesfunktioner

  4. Forespørgsel med kommaseparerede IN-parametre i PLSQL