1

GuidesAvailabilityの 2 つのテーブルがあります。Guidesはガイドのリストで、Availabilityは特定のガイドに関する情報が知られている日付のリストです。たとえば、03/03/14 - Guide 3 - Availableまたは05/03/14 - Guide 1 - Busyです。特定の日のガイドの空き状況がまだわからない場合、その日の空き状況にはまったくエントリがありませ

今後 3 日間のすべてのガイドのステータスのリストを返すクエリを作成したいと考えています。ステータスが不明な場合は、Unknownと表示されます。

SQL ではこのタスクは間違いなく実行可能ですが、Access 2013 で Web アプリを作成する必要があるという制約があります。つまり、Access でクエリ エディターを使用する必要があります。専門知識をお持ちの方は、ガイダンスを提供できますか? 質問で不明な点があれば、そのように言ってください。

Example query output:
03/03/2013 - Guide 1 - Busy
03/03/2013 - Guide 2 - Unknown
03/03/2013 - Guide 3 - Unknown
04/03/2013 - Guide 1 - Available
04/03/2013 - Guide 2 - Available
04/03/2013 - Guide 3 - Unknown
05/03/2013 - Guide 1 - Unknown
05/03/2013 - Guide 2 - Unknown
05/03/2013 - Guide 3 - Unknown

Table: Guides
Guide 1
Guide 2
Guide 3

Table: Availability
03/03/2013 - Guide 1 - Busy
04/03/2013 - Guide 1 - Available
04/03/2013 - Guide 2 - Available

PS: 誰かが、今後 10 年間のすべての日付をリストした 3 つ目の表を作成する必要があるかもしれないと提案しました。それが解決に役立つ場合、これは問題にはなりません

4

1 に答える 1

1

Access に制限されている場合、再帰 CTE を使用することはできません (興味がある場合は、Google で調べてください)。

したがって、すべての日付を含むテーブルを作成する必要があります。テーブルが AllDates と呼ばれ、日付フィールドが Dte である場合、クエリは次のようになります (返される行数を制限するために日付範囲でフィルター処理する必要がある場合があります。そうしないと、10 年すべてのレコードが表示されます)。

SELECT Availability.Dte, Availability.Guide, Availability.Status
FROM Availability INNER JOIN Guides ON Availability.Guide = Guides.Guide
UNION ALL
SELECT  AllDates.Dte, Guides.Guide, 'Unknown' AS Status
FROM AllDates, Guides
WHERE NOT EXISTS (SELECT 1 FROM Availability WHERE Availability.Dte = AllDates.Dte And Availability.Guide = Guides.Guide)
ORDER BY 1, 2;

Access の Web バージョンでは、2 つのクエリを使用する必要があります。最初のもの ( DatesGuides) は、すべての日付のすべてのガイドを一覧表示し、その構文は次のように単純です。

SELECT Guides.Guide, AllDates.Dte
FROM AllDates, Guides;

2 番目のクエリは、最初のクエリと LEFT JOINED されます。その構文は次のとおりです。

SELECT DatesGuides.Dte, DatesGuides.Guide, Nz([Status],'Unknown') AS Expr1
FROM Availability RIGHT JOIN DatesGuides ON Availability.Dte = DatesGuides.Dte AND Availability.Guide = DatesGuides.Guide;
于 2013-03-04T01:46:18.033 に答える