必要な結果を得るには、いくつかの方法があります。 @Sheela KR's に似ています CASE 式で集計関数を使用できますが、より簡潔な方法で記述できます:
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;
SQL Fiddle with Demo を参照してください。 .
これは PIVOT 関数を使用して記述することもできますが、複数の列をピボットしたい場合は、最初に First
のアンピボットを確認する必要があります。 そして Last
列。
アンピボット プロセスにより、複数の列が複数のデータ行に変換されます。使用している SQL Server のバージョンを指定していませんが、SELECT
を使用できます UNION ALL
で CROSS APPLY
で または UNPIVOT
最初の変換を実行する関数:
select col = col + cast(rowid as varchar(10)), value
from yourtable
cross apply
(
select 'First', First union all
select 'Last', Last
) c (col, value)
SQL Fiddle with Demo を参照してください。 .これにより、データが次の形式に変換されます:
<プレ>| COL | VALUE |
|--------|-------------|
| First1 | RandomName1 |
| Last1 | RandomLast1 |
| First2 | RandomName2 |
| Last2 | RandomLast2 |
データが複数の行になったら、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;
SQL Fiddle with Demo を参照してください。
どちらも次の結果を返します:
<プレ>| FIRST1 | LAST1 | FIRST2 | LAST2 | FIRST3 | LAST3 | FIRST4 | LAST4 | FIRST5 | LAST5 |
|-------------|-------------|-------------|-------------|-------------|-------------|-------------|-------------|-------------|-------------|
| RandomName1 | RandomLast1 | RandomName2 | RandomLast2 | RandomName3 | RandomLast3 | RandomName4 | RandomLast4 | RandomName5 | RandomLast5 |