以下の私のクエリは、それが返す最後のレコードの量を2倍にしています。アクティビティ、予約、一時予約の3つのテーブルがあります。クエリは、アクティビティと添付情報を一覧表示し、各アクティビティによって予約テーブルから(BookingTotalとして)予約された場所の総数(SUMを使用)を取得する必要があります。次に、一時予約(tempPlacesReservedとして)についても同じように計算する必要があります。そのテーブル内のreservedateフィールドは将来です。
ただし、最初の問題は、tempbookingsテーブルにアクティビティのレコードがない場合、そのアクティビティのレコードがまったく返されないことです。これを回避するために、過去にダミーレコードを作成して、レコードを返すようにしましたが、私がそれをすることができるので、私がこれをする必要がないならば、私はそれを好むでしょう!
私が抱えている主な問題は、返された結果の最終的な記録では、予約の合計と予約された場所が2倍になり、もちろんクエリ全体が役に立たなくなることです。
私は何か間違ったことをしていることを知っています。私はそれを分類することができませんでした。オンラインで同様の問題を検索しましたが、それらを私の状況に正しく適用することができません。
どんな助けでもいただければ幸いです。
PS通常、データベース、テーブル、フィールドへのすべてのパスに完全にラベルを付ける必要はないことは承知していますが、使用する予定のプログラムでは、この方法でラベルを付ける必要があります。
コード:
SELECT [LeisureActivities].[dbo].[activities].[activityID],
[LeisureActivities].[dbo].[activities].[activityName],
[LeisureActivities].[dbo].[activities].[activityDate],
[LeisureActivities].[dbo].[activities].[activityPlaces],
[LeisureActivities].[dbo].[activities].[activityPrice],
SUM([LeisureActivities].[dbo].[bookings].[bookingPlaces]) AS 'bookingTotal',
SUM (CASE WHEN[LeisureActivities].[dbo].[tempbookings].[tempReserveDate] > GetDate() THEN [LeisureActivities].[dbo].[tempbookings].[tempPlaces] ELSE 0 end) AS 'tempPlacesReserved'
FROM [LeisureActivities].[dbo].[activities],
[LeisureActivities].[dbo].[bookings],
[LeisureActivities].[dbo].[tempbookings]
WHERE ([LeisureActivities].[dbo].[activities].[activityID]=[LeisureActivities].[dbo].[bookings].[activityID]
AND [LeisureActivities].[dbo].[activities].[activityID]=[LeisureActivities].[dbo].[tempbookings].[tempActivityID])
AND [LeisureActivities].[dbo].[activities].[activityDate] > GetDate ()
GROUP BY [LeisureActivities].[dbo].[activities].[activityID],
[LeisureActivities].[dbo].[activities].[activityName],
[LeisureActivities].[dbo].[activities].[activityDate],
[LeisureActivities].[dbo].[activities].[activityPlaces],
[LeisureActivities].[dbo].[activities].[activityPrice];