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

SQL:Real Transpose

Nejsem si jistý, proč si myslíte, že toho nemůžete dosáhnout pomocí UNPIVOT a 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

Viz SQL Fiddle s ukázkou . V případě potřeby to lze také provést dynamicky.

Upravte, pokud je třeba zachovat pořadí sloupců, můžete použít něco takového, které použije row_number() bez použití order by v jednom ze sloupců tabulky (zde je článek o použití nedeterministická čísla řádků ):

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;

Viz SQL Fiddle s ukázkou




  1. Stále dostáváte ORA-00933:Příkaz SQL nebyl správně ukončen

  2. Jak provést nezpracovaný dotaz s návratem v sqlalchemy

  3. Načíst více než 3 data z mysql do zaškrtávacího políčka

  4. Prozkoumání možností čekání na zámek s nízkou prioritou v SQL Server 2014 CTP1