Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Access 2016)
ユニオンクエリによる集計がしたいです
投稿日時: 21/01/25 16:06:15
投稿者: myzkktht

いつもお世話になっております。
以下の並びの休憩を横ではなく縦に並び替えを行いたいと思っています。
ユニオンクエリを利用すると思うのですが、以下では社員IDがうまく取得できません
 
SELECT A.ID, A.休憩, A.戻り
FROM (SELECT ID, 休憩1 AS 休憩 ,戻り1 AS 戻り , 1 AS ID FROM Test_tb WHERE 休憩1 is not null
UNION ALL
SELECT ID, 休憩2 AS 休憩 ,戻り2 AS 戻り , 2 AS ID FROM Test_tb WHERE 休憩2 is not null
UNION ALL
SELECT ID, 休憩3 AS 休憩 ,戻り3 AS 戻り , 3 AS ID FROM Test_tb WHERE 休憩3 is not null
) AS A
WHERE (((A.ID) Is Not Null));
 
以下になるようにしたいと思っています。ぜひご教示のほどよろしくお願いします。
 
社員ID 日付 休憩1 休憩1終 休憩2 休憩2終 休憩3 休憩3終 休憩CD
1234 2120/1/1 12:00 13:00 16:00 16:30 18:00 18:30 0

社員ID 日付 休憩 休憩終 休憩CD
1234 2120/1/1 12:00 13:00 1
1234 2120/1/1 16:00 16:30 2
1234 2120/1/1 18:00 18:30 3

回答
投稿日時: 21/01/25 16:48:41
投稿者: sk

引用:
SELECT ID, 休憩1 AS 休憩 ,戻り1 AS 戻り , 1 AS ID FROM Test_tb WHERE 休憩1 is not null
UNION ALL
SELECT ID, 休憩2 AS 休憩 ,戻り2 AS 戻り , 2 AS ID FROM Test_tb WHERE 休憩2 is not null
UNION ALL
SELECT ID, 休憩3 AS 休憩 ,戻り3 AS 戻り , 3 AS ID FROM Test_tb WHERE 休憩3 is not null

引用:
社員ID 日付 休憩1 休憩1終 休憩2 休憩2終 休憩3 休憩3終 休憩CD
1234 2120/1/1 12:00 13:00 16:00 16:30 18:00 18:30 0

とりあえず、フィールド名の表記揺れを修正して下さい。
 
引用:
ユニオンクエリを利用すると思うのですが、以下では社員IDがうまく取得できません

テーブル[Test_tb]に実際に定義されているフィールドの名前は
[ID]なのか、それとも[社員ID]なのか、どちらなのでしょうか。

投稿日時: 21/01/25 17:21:57
投稿者: myzkktht

ご回答いただきありがとうございます。
テーブル[Test_tb]に実際に定義されているフィールドの名前は
[ID]なのか、それとも[社員ID]なのか、どちらなのでしょうか。
>わかりづらくてすいません、社員IDになります。よろしくお願いします。
>表記ゆれも修正させていただきました、ありがとうございます。

回答
投稿日時: 21/01/25 17:52:09
投稿者: sk

引用:
表記ゆれも修正させていただきました、ありがとうございます。

どこをどう修正したのか(各フィールドの正しい名前は何なのか)を
具体的に明記して下さい。
 
引用:
わかりづらくてすいません、社員IDになります。

-------------------------------
誤             正
-------------------------------
ID       ->    社員ID
戻り1    ->    休憩1終
戻り2    ->    休憩2終
戻り3    ->    休憩3終
-------------------------------

とりあえず、[Test_tb]における各フィールドの名前の正誤関係が
以上のようになっているものと仮定します。
 
( SQL ビュー)
-------------------------------------------------------------
SELECT [UQ].[社員ID],
       [UQ].[日付],
       [UQ].[休憩ID],
       [UQ].[休憩],
       [UQ].[休憩終]
FROM (SELECT [Test_tb].[社員ID],
             [Test_tb].[日付],
             1 AS [休憩ID],
             [Test_tb].[休憩1] AS [休憩],
             [Test_tb].[休憩1終] AS [休憩終]
      FROM [Test_tb]
      UNION ALL
      SELECT [Test_tb].[社員ID],
             [Test_tb].[日付],
             2 AS [休憩ID],
             [Test_tb].[休憩2] AS [休憩],
             [Test_tb].[休憩2終] AS [休憩終]
      FROM [Test_tb]
      UNION ALL
      SELECT [Test_tb].[社員ID],
             [Test_tb].[日付],
             3 AS [休憩ID],
             [Test_tb].[休憩3] AS [休憩],
             [Test_tb].[休憩3終] AS [休憩終]
      FROM [Test_tb]) AS [UQ]
WHERE [UQ].[社員ID] Is Not Null
  AND [UQ].[休憩] Is Not Null
ORDER BY [UQ].[社員ID],
         [UQ].[日付],
         [UQ].[休憩ID];
-------------------------------------------------------------

投稿日時: 21/01/27 08:56:26
投稿者: myzkktht

ありがとうございました。
ご教示いただきました内容にて解決しました。
この度は本当にありがとうございました。
またよろしくお願いいたします。