sql >> Databasteknik >  >> RDS >> Sqlserver

SQL:Real Transpose

Jag är osäker på varför du tror att du inte kan åstadkomma detta med en UNPIVOT och 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-fiol med demo . Detta kan också utföras dynamiskt vid behov.

Redigera, om kolumnordningen behöver behållas, kan du använda något i stil med detta, som tillämpar row_number() utan att använda en order by på en av kolumnerna i din tabell (här är en artikel om att använda icke-deterministiska radnummer ):

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-fiol med demo




  1. LIKE-frågan sql fungerar inte i sammanlänkade värden med mellanslag

  2. Varför slutar min cfloop efter att ha satt in första id?

  3. Inaktivera PostgreSQL-kontroller av främmande nyckel för migrering

  4. Lägga till flera textrutor i en mysql-databas