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

SQL Server - PIVOT - две колони в редове

Има няколко различни начина, по които можете да постигнете желания резултат. Подобно на @Sheela K R's отговор можете да използвате агрегатна функция с CASE израз, но тя може да бъде написана по по-сбит начин:

изберете max(случай, когато rowid =1, след това първи край) First1, max(случай, когато rowid =1, след това последен край) Last1, max(случай, когато rowid =2, след това първи край) First2, max(случай, когато rowid =2 след това последен край) Last2, max(случай, когато rowid =3, след това първи край) First3, max(случай, когато rowid =3, след това последен край) Last3, max(случай, когато rowid =4, след това първи край) First4, max( случай, когато rowid =4, след това последен край) Last4, max (случай, когато rowid =5, след това първи край) First5, max (случай, когато rowid =5, след това последен край) Last5 от вашата таблица; 

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

Това може да се напише и с помощта на функцията PIVOT, но тъй като искате да завъртите няколко колони, първо бихте искали да разгледате отмяната на завъртането на вашата First и Последен колони.

Процесът на unpivot ще преобразува множеството ви колони в множество редове с данни. Не сте посочили каква версия на SQL Server използвате, но можете да използвате SELECT с UNION ALL с CROSS APPLY или дори UNPIVOT функция за извършване на първото преобразуване:

изберете col =col + cast(rowid като varchar(10)), valuefrom yourtablecross apply (изберете 'First', First union всички изберете 'Last', Last) c (col, value) 

Вижте SQL Fiddle с демонстрация . Това преобразува вашите данни във формат:

<предварителен код>| COL | СТОЙНОСТ ||--------|-------------|| Първо1 | Произволно име1 || Последно1 | Случаен Последен1 || Първо2 | Произволно име2 || Последно2 | RandomLast2 |

След като данните са в няколко реда, можете лесно да приложите функцията PIVOT:

изберете First1, Last1, First2, Last2, First3, Last3, First4, Last4, First5, Last5from( select col =col + cast(rowid as varchar(10)), value from yourtable cross apply ( select ' First', First union all select 'Last', Last ) c (col, value)) dpivot( max(value) for col in (First1, Last1, First2, Last2, First3, Last3, First4, Last4, First5, Last5) ) piv; 

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

И двете дават резултат от:

<предварителен код>| ПЪРВО1 | ПОСЛЕДНО1 | ПЪРВО2 | ПОСЛЕДНО2 | ПЪРВО3 | ПОСЛЕДНО3 | ПЪРВО4 | ПОСЛЕДНО4 | ПЪРВО5 | ПОСЛЕДНИ5 ||-------------|-------------|-------------|----- --------|-------------|-------------|------------- |-------------|-------------|-------------|| Произволно име1 | Случаен Последен1 | Случайно име2 | СлучайниПоследни2 | Случайно име3 | СлучайниПоследни3 | Случайно име4 | СлучайниПоследни4 | Случайно име5 | 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. HTML формат в sp_send_dbmail

  2. Съединяване на три маси със съединения, различни от INNER JOIN

  3. SQL SUM от две различни таблици

  4. Как тествате за съществуването на потребител в SQL Server?

  5. Защо да използвате Select Top 100 процента?