- ベストアンサー
ACCESSでフィールドと行を入替える方法
- ACCESSでフィールドと行を入替える方法についての質問です。テーブルを並べ替える際に、ユニオンクエリを使用したが、月の日数が異なるとエラーが発生するとのことです。
- 現在のテーブルでは氏名と日付がフィールドとして表示されていますが、氏名と日付を行に変更したいとのことです。
- 作成したいテーブルでは、氏名と日付を別々のフィールドとし、シフト情報を一つのフィールドに表示したいとのことです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ユニオンクエリでエラーになったのはわかりませんが、同様にユニオンクエリで表示するクエリになります。 元のテーブル「シフト」は、月別のテーブルになっていて、 15~14の日付数字がフィールド名になっているものとします。 (15~15は作れないので:同じフィールド名は付けれない) 月に関係なく、29, 30, 31 のフィールド名があり、例えば、今年2月の場合では、 29, 30, 31 は使っていない(内容がない)ものとします。 29, 30, 31 の抽出条件には、日にちをたして、同じ月なら・・・ とします。 以下クエリを開くと、年月入力となります。 2010/2 とか、H22/2 とか入力すると、氏名、日付(西暦)、シフト、の一覧表示になります。 今後は、このテーブル構成を使っていくことをお勧めします。 集計とかも楽ですし、また、クロス集計を使うと元のテーブル構成を作ることもできます。 月別にテーブルを分ける必要もなくなります。 UNION 部分は、UNION ALL でも (私は遅くなければ UNION を使っていますが:並び替えしてくれるし重複削除してくれるし) クエリ例) SELECT 氏名, CDate([年月を入力してください])+14 AS 日付, [15] AS シフト FROM シフト UNION SELECT 氏名, CDate([年月を入力してください])+15 AS 日付, [16] AS シフト FROM シフト UNION SELECT 氏名, CDate([年月を入力してください])+16 AS 日付, [17] AS シフト FROM シフト UNION SELECT 氏名, CDate([年月を入力してください])+17 AS 日付, [18] AS シフト FROM シフト UNION SELECT 氏名, CDate([年月を入力してください])+18 AS 日付, [19] AS シフト FROM シフト UNION SELECT 氏名, CDate([年月を入力してください])+19 AS 日付, [20] AS シフト FROM シフト UNION SELECT 氏名, CDate([年月を入力してください])+20 AS 日付, [21] AS シフト FROM シフト UNION SELECT 氏名, CDate([年月を入力してください])+21 AS 日付, [22] AS シフト FROM シフト UNION SELECT 氏名, CDate([年月を入力してください])+22 AS 日付, [23] AS シフト FROM シフト UNION SELECT 氏名, CDate([年月を入力してください])+23 AS 日付, [24] AS シフト FROM シフト UNION SELECT 氏名, CDate([年月を入力してください])+24 AS 日付, [25] AS シフト FROM シフト UNION SELECT 氏名, CDate([年月を入力してください])+25 AS 日付, [26] AS シフト FROM シフト UNION SELECT 氏名, CDate([年月を入力してください])+26 AS 日付, [27] AS シフト FROM シフト UNION SELECT 氏名, CDate([年月を入力してください])+27 AS 日付, [28] AS シフト FROM シフト UNION SELECT 氏名, CDate([年月を入力してください])+28 AS 日付, [29] AS シフト FROM シフト WHERE Month(CDate([年月を入力してください])) = Month(CDate([年月を入力してください])+28) UNION SELECT 氏名, CDate([年月を入力してください])+29 AS 日付, [30] AS シフト FROM シフト WHERE Month(CDate([年月を入力してください])) = Month(CDate([年月を入力してください])+29) UNION SELECT 氏名, CDate([年月を入力してください])+30 AS 日付, [31] AS シフト FROM シフト WHERE Month(CDate([年月を入力してください])) = Month(CDate([年月を入力してください])+30) UNION SELECT 氏名, DateAdd("m",1,[年月を入力してください])+0 AS 日付, [01] AS シフト FROM シフト UNION SELECT 氏名, DateAdd("m",1,[年月を入力してください])+1 AS 日付, [02] AS シフト FROM シフト UNION SELECT 氏名, DateAdd("m",1,[年月を入力してください])+2 AS 日付, [03] AS シフト FROM シフト UNION SELECT 氏名, DateAdd("m",1,[年月を入力してください])+3 AS 日付, [04] AS シフト FROM シフト UNION SELECT 氏名, DateAdd("m",1,[年月を入力してください])+4 AS 日付, [05] AS シフト FROM シフト UNION SELECT 氏名, DateAdd("m",1,[年月を入力してください])+5 AS 日付, [06] AS シフト FROM シフト UNION SELECT 氏名, DateAdd("m",1,[年月を入力してください])+6 AS 日付, [07] AS シフト FROM シフト UNION SELECT 氏名, DateAdd("m",1,[年月を入力してください])+7 AS 日付, [08] AS シフト FROM シフト UNION SELECT 氏名, DateAdd("m",1,[年月を入力してください])+8 AS 日付, [09] AS シフト FROM シフト UNION SELECT 氏名, DateAdd("m",1,[年月を入力してください])+9 AS 日付, [10] AS シフト FROM シフト UNION SELECT 氏名, DateAdd("m",1,[年月を入力してください])+10 AS 日付, [11] AS シフト FROM シフト UNION SELECT 氏名, DateAdd("m",1,[年月を入力してください])+11 AS 日付, [12] AS シフト FROM シフト UNION SELECT 氏名, DateAdd("m",1,[年月を入力してください])+12 AS 日付, [13] AS シフト FROM シフト UNION SELECT 氏名, DateAdd("m",1,[年月を入力してください])+13 AS 日付, [14] AS シフト FROM シフト ;
その他の回答 (1)
1.一人の人のデータだけを抽出する。クエリーで簡単 2.そのデータをエクセルに持っていく。データの整理の後、エクセルで行と列の交換をする。 3.必要ならば、アクセスにインポート、リンク (?)で持ち帰る。 これならどれも容易に出来そうですが。
補足
ご回答ありがとうございます。 ただ、300人くらいおりますので、1人ずつ行うのは避けたいです。 まとめて行う方法があればと思い質問させていただいた次第です。
お礼
ご回答ありがとうございました。できました! まず、15~15日になっていたのは記載ミスです。大変申し訳ありません。 また、ユニオンクエリがエラーになっていたのは、WHEREを入れていなかったからでした。 SQLは素人なもので、WHEREは全然思いつきませんでした。 ありがとうございました。