Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server - PIVOT - dwie kolumny w rzędach

Istnieje kilka różnych sposobów uzyskania pożądanego rezultatu. Podobne do @Sheela K R odpowiedź możesz użyć funkcji agregującej z wyrażeniem CASE, ale można to napisać w bardziej zwięzły sposób:

select 
  max(case when rowid = 1 then first end) First1,
  max(case when rowid = 1 then last end) Last1,
  max(case when rowid = 2 then first end) First2,
  max(case when rowid = 2 then last end) Last2,
  max(case when rowid = 3 then first end) First3,
  max(case when rowid = 3 then last end) Last3,
  max(case when rowid = 4 then first end) First4,
  max(case when rowid = 4 then last end) Last4,
  max(case when rowid = 5 then first end) First5,
  max(case when rowid = 5 then last end) Last5
from yourtable;

Zobacz SQL Fiddle z wersją demonstracyjną .

Można to również napisać za pomocą funkcji PIVOT, jednak ponieważ chcesz przestawić wiele kolumn, najpierw przyjrzyj się cofnięciu swojego First i Last kolumny.

Proces unpivot przekształci wiele kolumn w wiele wierszy danych. Nie określiłeś, jakiej wersji SQL Server używasz, ale możesz użyć SELECT z UNION ALL z CROSS APPLY lub nawet UNPIVOT funkcja do wykonania pierwszej konwersji:

select col = col + cast(rowid as varchar(10)), value
from yourtable
cross apply 
(
  select 'First', First union all
  select 'Last', Last
) c (col, value)

Zobacz SQL Fiddle z wersją demonstracyjną . Spowoduje to konwersję danych do formatu:

|    COL |       VALUE |
|--------|-------------|
| First1 | RandomName1 |
|  Last1 | RandomLast1 |
| First2 | RandomName2 |
|  Last2 | RandomLast2 |

Gdy dane znajdują się w wielu wierszach, możesz łatwo zastosować funkcję PIVOT:

select First1, Last1, 
  First2, Last2,
  First3, Last3, 
  First4, Last4, 
  First5, Last5
from
(
  select col = col + cast(rowid as varchar(10)), value
  from yourtable
  cross apply 
  (
    select 'First', First union all
    select 'Last', Last
  ) c (col, value)
) d
pivot
(
  max(value)
  for col in (First1, Last1, First2, Last2,
              First3, Last3, First4, Last4, First5, Last5)
) piv;

Zobacz Skrzypce SQL z wersją demonstracyjną

Oba dają wynik:

|      FIRST1 |       LAST1 |      FIRST2 |       LAST2 |      FIRST3 |       LAST3 |      FIRST4 |       LAST4 |      FIRST5 |       LAST5 |
|-------------|-------------|-------------|-------------|-------------|-------------|-------------|-------------|-------------|-------------|
| RandomName1 | RandomLast1 | RandomName2 | RandomLast2 | RandomName3 | RandomLast3 | RandomName4 | RandomLast4 | RandomName5 | RandomLast5 |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy SQLExpress 2005 i 2008 można zainstalować na tym samym komputerze bez problemu?

  2. Generuj skrót hasła członkostwa ASP.Net w czystym T-SQL

  3. Korzystanie z wbudowanej funkcji konwertowania sql w kryteriach hibernacji

  4. Jak zaokrąglać (GÓRA/DÓŁ) w SQL Server – 5 przydatnych wskazówek

  5. DAY() Przykłady w SQL Server (T-SQL)