Има няколко различни начина, по които можете да постигнете желания резултат. Подобно на @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 |