0

この単純な JOIN クエリで結果のないテーブルが返される理由を誰か教えてもらえますか? countINTmonth クエリと countDEPTmonth クエリの両方を別々に実行すると、期待どおりの結果が得られます。ただし、単純な JOIN クエリを実行すると、列名はあるがデータがないテーブルが表示されますが、エラー メッセージも表示されません。

CountINTmonth クエリ

SELECT Count(clients.ssn) AS CountofIntakes, month(clients.prog_start) AS Month2, year(clients.prog_start) AS Year2
FROM clients
WHERE clients.prog_start BETWEEN [Enter Start Date] AND [Enter End Date]
GROUP BY year(clients.prog_start), month(clients.prog_start)
ORDER BY year(clients.prog_start) DESC , month(clients.prog_start) DESC;

CountDEPTmonth クエリ

SELECT Count(clients.ssn) AS CountOfDepartures, month(clients.[departure date]) AS Month1, year(clients.[departure date]) AS year1
FROM clients
WHERE clients.[departure date] BETWEEN [Enter Start Date] AND [Enter End Date]
GROUP BY year(clients.[departure date]), month(clients.[departure date])
ORDER BY year(clients.[departure date]) DESC , month(clients.[departure date]) DESC;

前の 2 つを結合するクエリ

SELECT countdeptmonth.countofdepartures, countintmonth.countofintakes, countdeptmonth.month1, countdeptmonth.year1
FROM countdeptmonth
INNER JOIN
countintmonth
ON (countdeptmonth.year1=countintmonth.year2 AND countdeptmonth.month1=countintmonth.month2)
ORDER BY countdeptmonth.year1 DESC, countdeptmonth.month1 DESC

JOIN を LEFT JOIN に変更すると、countofintakes 列が空であることを除いてデータが表示されます。JOIN を RIGHT JOIN に変更すると、データを持つ列は countofintakes だけです。

テーブルに関する注意
事項 CLIENTS テーブルには、さまざまなデータ ポイントを持つ一連の列があります。SSN は主キーです。prog_start は、治療プログラムを開始した日付フィールドです。[出発日] は、プログラムを離れた日付フィールドです。[開始日を入力してください] と [終了日を入力してください] は、ユーザーがクエリを実行するときに入力する日付範囲である必要があります。日付は両方のクエリで同じである必要があります。どんな助けでも大歓迎です!

4

1 に答える 1

1

私は自分の問題を解決したかもしれません。MonthName 関数を Month1 列と Month2 列に追加しました。

MonthName(month(clients.prog_start)) AS Month2

MonthName(month(clients.[departure date])) AS Month1

これを行うと、JOIN クエリは正しい結果を示しました。GROUP BY フィールドを更新する必要さえありませんでした。

クエリが月の数だけで結合できなかった理由と、正しく結合するために名前が必要だった理由を知っている人はいますか?

于 2013-02-14T17:57:21.513 に答える