MS Access では、SQL を使用して、ユーザーが開始日と終了日の範囲を入力する必要がある 2 つのクエリを内部結合で結合しました。最初のクエリ (クエリ 1) は、プログラムを去った人数、彼らが去った状況、月、および彼らが去った年をリストします。Count 関数を最初に年、次に月、次に退職状況 (5 つのオプションのいずれか) でグループ化しています。これは、各月に複数のレコードがあることを意味します (ただし、各月のレコード数が必ずしも同じであるとは限りません)。 )。
2 番目のクエリ (クエリ 2) は、プログラムへの参加を許可した人数、月、および年をカウントします。最初に年、次に月でグループ化されます。したがって、このクエリでは、1 か月に 1 つのレコードしかありません。
私の内部結合は、クエリ 1 の各月のレコード数に応じて、クエリ 2 の値を複数回繰り返すことを除いて、クエリを正しく結合します。クエリ 2 の値を 1 か月に 1 回だけリストして、その月の残りのレコードを null のままにする方法はありますか?
クエリ 1 は次のとおりです。
SELECT Count(clients.ssn) AS CountOfDepartures, clients.[leaving situation], a.monthname, a.year1, a.month1
FROM clients INNER JOIN (SELECT month(clients.[departure date]) AS Month1, year(clients.[departure date]) AS Year1, months.monthname, clients.ssn FROM clients
INNER JOIN months ON month(clients.[departure date])=months.monthnumber WHERE clients.[departure date] BETWEEN [Enter Start Date] AND [Enter End Date]) AS A
ON clients.ssn=a.ssn
GROUP BY a.year1, a.monthname, clients.[leaving situation], a.month1
ORDER BY a.year1 DESC , a.month1 DESC;
クエリ 2 は次のとおりです。
SELECT Count(clients.ssn) AS CountofIntakes, b.monthname, b.year2, b.month2
FROM clients
INNER JOIN (SELECT month(clients.prog_start) AS Month2, year(clients.prog_start) AS Year2, months.monthname, clients.ssn
FROM clients INNER JOIN months ON month(clients.prog_start)=months.monthnumber WHERE clients.prog_start BETWEEN [Enter Start Date] AND [Enter End Date]) AS B
ON clients.ssn=b.ssn
GROUP BY b.monthname, b.year2, b.month2
ORDER BY b.year2 DESC , b.month2 DESC;
これらを組み合わせた方法は次のとおりですが、繰り返しの値が得られます。
SELECT countofdeparturesbyleavingsituationmonth.countofdepartures, countofdeparturesbyleavingsituationmonth.[leaving situation], countofdeparturesbyleavingsituationmonth.monthname, countofdeparturesbyleavingsituationmonth.year1, countofdeparturesbyleavingsituationmonth.month1, countofintakesbymonth.countofintakes
FROM countofdeparturesbyleavingsituationmonth
INNER JOIN countofintakesbymonth ON (countofdeparturesbyleavingsituationmonth.monthname=countofintakesbymonth.monthname) AND (countofdeparturesbyleavingsituationmonth.year1=countofintakesbymonth.year2) AND (countofdeparturesbyleavingsituationmonth.monthname=countofintakesbymonth.monthname)
ORDER BY year1 DESC , month1 DESC;
CLIENTS テーブルには、各クライアントのレコードがあり、さまざまな臨床データの列が多数あります (私は非営利の薬物/アルコール リハビリテーション センターで働いています)。MONTHS テーブルには、1 つの列に 12 か月が書き出され、2 番目の列に対応する数値が示されています。数値ではなく月名をリストするために、MONTHS テーブルで内部結合を使用します (ただし、MonthName 関数を使用してレポートでこれを行うことができることに気付きました....)。どんなアドバイスでも大歓迎です!また、このクエリでレポートを作成すると、クエリで各月に複数の摂取値があるため、摂取量の合計レポート (および暦年ごと) の SUM 値が正しくないため、この質問をしています。そのため、SUM は必要以上に大きくなります。その問題を超えて、このクエリは正しいレポートを生成します。