ray88’s diary

お仕事で困ったとき用の自分用の覚書

Access 列持ちデータを行持ちデータへ変換する

Access 列持ち→行持ち変換・サンプルデータ作成 - ray88’s diary

■サンプルコード
このSQLクエリは、UNION ALL を使用して複数の SELECT ステートメントを結合し、列持ちデータから行持ち形式にデータを変換します。最初の SELECT ステートメントでは、列の別名を AS 句で明示的に指定しますが、その後のステートメントでは列の順序が同じであれば、別名の指定は不要です。結果セットでは、最初のステートメントで指定された別名が全ての結合されたデータに適用されます。これにより、クエリがより読みやすく、効率的になります
※SalesDataはあなたのテーブル名に置き換えてください。
クエリは各月のデータがNULLでない場合に限ってデータを選択しています。
 もしNULL値も含めたい場合は、各SELECTステートメントからWHERE句を削除してください。

以下のSQL文はAccessのクエリを作成のSQLビューに入力する想定です。

SELECT [Code], '1-Apr-2022' AS year_month, [1-4-2022] AS amount
FROM SalesData
WHERE [1-4-2022] IS NOT NULL
UNION ALL
SELECT [Code], '1-May-2022' AS year_month, [1-5-2022]
FROM SalesData
WHERE [1-5-2022] IS NOT NULL
UNION ALL
SELECT [Code], '1-Jun-2022' AS year_month, [1-6-2022]
FROM SalesData
WHERE [1-6-2022] IS NOT NULL
UNION ALL
SELECT [Code], '1-Jul-2022' AS year_month, [1-7-2022]
FROM SalesData
WHERE [1-7-2022] IS NOT NULL
UNION ALL
SELECT [Code], '1-Aug-2022' AS year_month, [1-8-2022]
FROM SalesData
WHERE [1-8-2022] IS NOT NULL
UNION ALL
SELECT [Code], '1-Sep-2022' AS year_month, [1-9-2022]
FROM SalesData
WHERE [1-9-2022] IS NOT NULL
UNION ALL
SELECT [Code], '1-Oct-2022' AS year_month, [1-10-2022]
FROM SalesData
WHERE [1-10-2022] IS NOT NULL
UNION ALL
SELECT [Code], '1-Nov-2022' AS year_month, [1-11-2022]
FROM SalesData
WHERE [1-11-2022] IS NOT NULL
UNION ALL
SELECT [Code], '1-Dec-2022' AS year_month, [1-12-2022]
FROM SalesData
WHERE [1-12-2022] IS NOT NULL
UNION ALL
SELECT [Code], '1-Jan-2023' AS year_month, [1-1-2023]
FROM SalesData
WHERE [1-1-2023] IS NOT NULL
UNION ALL
SELECT [Code], '1-Feb-2023' AS year_month, [1-2-2023]
FROM SalesData
WHERE [1-2-2023] IS NOT NULL
UNION ALL
SELECT [Code], '1-Mar-2023' AS year_month, [1-3-2023]
FROM SalesData
WHERE [1-3-2023] IS NOT NULL