SQL Server の複数リストの転置
テーブルの転置とは、行を列に、列を行に変換することを意味します。これは、分析やプレゼンテーションのためにデータをピボットする必要がある場合に特に便利です。
質問:
次の形式の複数の列を含むテーブルを転置したいとします:
Day | A | B |
---|---|---|
Mon | 1 | 2 |
Tue | 3 | 4 |
Wed | 5 | 6 |
Thu | 7 | 8 |
Fri | 9 | 0 |
次の形式に変換します:
Value | Mon | Tue | Wed | Thu | Fri |
---|---|---|---|---|---|
A | 1 | 3 | 5 | 7 | 9 |
B | 2 | 4 | 6 | 8 | 0 |
解決策:
SQL で複数の列を転置するには、UNPIVOT 関数と PIVOT 関数を一緒に使用できます。
1. アンピボット:
UNPIVOT 関数は、列を行に変換することでデータを非正規化します。これにより、day、col、value の 3 つの列を持つ新しいテーブルが作成されます。
<code class="language-sql">select day, col, value from yourtable unpivot ( value for col in (A, B) ) unpiv</code>
2. ピボット:
PIVOT 関数は、日の値を列に変換することでデータを再正規化します。これにより、転置されたテーブルが生成されます。
<code class="language-sql">select * from ( select day, col, value from yourtable unpivot ( value for col in (A, B) ) unpiv ) src pivot ( max(value) for day in (Mon, Tue, Wed, Thu, Fri) ) piv</code>
注:
クエリに適用します:
特定のクエリを転置するには、次の変更コードを使用できます:
<code class="language-sql">select * from ( select LEFT(datename(dw,datetime),3) as DateWeek, col, value from DataTable cross apply ( values ('A', ACalls), ('B', BCalls) ) c (col, value) ) src pivot ( sum(value) for dateweek in (Mon, Tue, Wed, Thu, Fri) ) piv</code>
これにより、目的の形式で転置されたテーブルが生成されます。
以上がSQL で複数列のテーブルを転置するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。