Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL:Реално транспониране

Не съм сигурен защо смятате, че не можете да постигнете това с UNPIVOT и 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

Вижте SQL Fiddle с демонстрация . Това може да се извърши и динамично, ако е необходимо.

Редактирайте, ако редът на колоните трябва да се запази, тогава можете да използвате нещо подобно, което прилага row_number() без да използвате order by в една от колоните във вашата таблица (ето една статия за използването недетерминирани номера на редове ):

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;

Вижте SQL Fiddle с демонстрация




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Избягвайте дублирането в заявката INSERT INTO SELECT в SQL Server

  2. SQL Server - подслушване на параметри

  3. Плюсове срещу минуси на внедряването на хибридна облачна среда

  4. итерация през редове на мрежа от данни

  5. Как да премахнете водещите и крайните празни пространства в SQL Server – TRIM()