MS Access 2010 の複合クエリについてサポートが必要です。
この構造のテーブルが 1 つあります。
ChoirOrder(name, category, day, h_start, h_end, ord);
ここでname
とcategory
は の主キーですChoirOrder
。category
フィールドは、A
またはB
ですY
。
次の形式でデータを抽出する必要があります。
FullChoirExecution (
name,
cat_a_day,
cat_a_h_start,
cat_a_h_end,
cat_a_order,
cat_b_day,
cat_b_h_start,
cat_b_h_end,
cat_b_order,
cat_y_day,
cat_y_h_start,
cat_y_h_end,
cat_y_order
);
(すべての聖歌隊は 1 つの行にのみ表示されname
、主キーである必要があります)。
問題は、元のテーブルに合唱団にそのカテゴリの行がない場合に、 、、およびフィールド ( 、またはの場合がある) で取得NULL
したいことです。たとえば、データが次の場合:cat_x_day
cat_x_h_start
cat_x_h_end
cat_x_h_order
x
A
B
Y
ChoirOrder
ChoirOrder
NAME | CAT | DAY | H_START | H_END | ORD
C1 | A | 04/03/2014 | 09:00 | 10:00 | 1
C2 | A | 04/03/2014 | 10:00 | 11:00 | 2
C3 | A | 04/03/2014 | 11:00 | 12:00 | 3
C4 | A | 04/03/2014 | 12:00 | 13:00 | 4
C1 | B | 05/03/2014 | 14:00 | 15:00 | 1
C2 | B | 05/03/2014 | 15:00 | 16:00 | 2
C5 | B | 05/03/2014 | 16:00 | 17:00 | 3
C3 | Y | 06/03/2014 | 09:00 | 10:00 | 1
C5 | Y | 06/03/2014 | 10:00 | 11:00 | 2
C6 | Y | 06/03/2014 | 11:00 | 12:00 | 3
C4 | Y | 06/03/2014 | 12:00 | 13:00 | 4
結果は次のようになります。
NAME | CAT_A_DAY | CAT_A_H_START | CAT_A_H_END | CAT_A_ORDER | CAT_B_DAY | CAT_B_H_START | CAT_B_H_END | CAT_B_ORDER | CAT_Y_DAY | CAT_Y_H_START | CAT_Y_H_END | CAT_Y_ORDER |
C1 | 04/03/2014 | 09:00 | 10:00 | 1 | 05/03/2014 | 14:00 | 15:00 | 1 | | | | |
C2 | 04/03/2014 | 10:00 | 11:00 | 2 | 05/03/2014 | 15:00 | 16:00 | 2 | | | | |
C3 | 04/03/2014 | 11:00 | 12:00 | 3 | | | | | 06/03/2014 | 09:00 | 10:00 | 1 |
C4 | 04/03/2014 | 12:00 | 13:00 | 4 | | | | | 06/03/2014 | 12:00 | 13:00 | 4 |
C5 | | | | | 05/03/2014 | 16:00 | 17:00 | 3 | 06/03/2014 | 10:00 | 11:00 | 2 |
C6 | | | | | | | | | 06/03/2014 | 11:00 | 12:00 | 3 |
(合唱団にはカテゴリがC1
の行がないため、フィールド、、およびが に設定されます。他の合唱団についても同様です)。ChoirOrder
Y
CAT_Y_DAY
CAT_Y_H_START
CAT_Y_H_END
CAT_Y_ORDER
NULL
次のコードを使用して、2 つのテーブルの完全外部結合を準備しました。A
カテゴリ内のすべての聖歌隊と、そのカテゴリの行しかないすべての聖歌隊を抽出することで機能しB
ます (Access 2010 は完全な外部結合をサポートしていないため、LEFT 結合 UNION RIGHT 結合を使用します)。
SELECT
B.[name] AS [name],
A.[day] AS [cat_a_day],
A.[h_start] AS [cat_a_h_start],
A.[h_end] AS [cat_a_h_end],
A.[ord] AS [cat_a_order],
B.[day] AS [cat_b_day],
B.[h_start] AS [cat_b_h_start],
B.[h_end] AS [cat_b_h_end],
B.[ord] AS [cat_b_order]
FROM
[ChoirOrder] AS A
LEFT OUTER JOIN
[ChoirOrder] AS B
ON
(A.[name] = B.[name])
AND (A.[category]='A' AND B.[category]='B')
UNION
SELECT
B.[name] AS [name],
A.[day] AS [cat_a_day],
A.[h_start] AS [cat_a_h_start],
A.[h_end] AS [cat_a_h_end],
A.[ord] AS [cat_a_order],
B.[day] AS [cat_b_day],
B.[h_start] AS [cat_b_h_start],
B.[h_end] AS [cat_b_h_end],
B.[ord] AS [cat_b_order]
FROM
[ChoirOrder] AS A
RIGHT OUTER JOIN
[ChoirOrder] AS B
ON
(A.[name] = B.[name])
AND (A.[category]='A' AND B.[category]='B')
WHERE A.[category] IS NULL;
ただし、このクエリは意図した結果の一部しか抽出しません。Y
カテゴリも含めるには、それを組み合わせるか、完全に書き直す必要があります。
入れてもいいと思った
NULL AS [cat_y_day],
NULL AS [cat_y_h_start],
NULL AS [cat_y_h_end],
NULL AS [cat_y_order]
クエリで、しかし私はそれを機能させることができません。何か案は?