私は4つのテーブルを持っています:
Service (serviceId(PK), serviceTypeId, capacity)
Facilitator (facilitatorId(PK), facilitatorName)
ServiceType (serviceTypeId(PK), serviceType)
ServiceFacilitator (serviceId(PK), facilitatorId(PK)) (join entity)
現在、「ServiceType」テーブルのサービス タイプは、ホテルとカンファレンス センターです。
「Service」テーブルの「capacity」列には、ServiceType.serviceTypeId に関連する場合にのみ意味のある数値が含まれます。つまり、サービスの種類に応じてベッドまたは座席を表します。
facilitatorName、Beds、Seat の 3 つの列を返すクエリを作成する必要があります。
ストアドプロシージャで一時テーブルを作成および破棄することは、将来のスケーラビリティなどに悪影響を与える可能性がある不十分なソリューションであり、ソリューションには Service テーブルでの自己結合が含まれることはほぼ確実です。
これまでのところ、クエリは次のようになっていますが、行は返されません。私は何が欠けていますか?
SELECT f.facilitatorName,(SUM(ts1.capacity)) as Beds,(SUM(ts2.capacity)) as Seats
FROM dbo.Facilitator as f,
dbo.TestService as ts1,
dbo.TestService as ts2,
dbo.ServiceFacilitator as sf
WHERE f.facilitatorId = sf.facilitatorId AND
(sf.serviceId = ts1.serviceId or
sf.serviceId = ts2.serviceId) and
ts1.serviceId = ts2.serviceId and
ts1.serviceTypeId = '1' and -- type hotel
ts2.serviceTypeId = '2' -- type conference centre
GROUP BY f.facilitatorName
このようにクエリを 2 つに分割すると、Beds と Seats の正確な結果が返されます。
SELECT f.facilitatorName,(SUM(ts1.capacity)) as Beds
FROM dbo.Facilitator as f,
dbo.TestService as ts1,
dbo.ServiceFacilitator as sf
WHERE f.facilitatorId = sf.facilitatorId AND
sf.serviceId = ts1.serviceId and
ts1.serviceTypeId = '1'
GROUP BY f.facilitatorName
SELECT f.facilitatorName,(SUM(ts2.capacity)) as Seats
FROM dbo.Facilitator as f,
dbo.TestService as ts2,
dbo.ServiceFacilitator as sf
WHERE f.facilitatorId = sf.facilitatorId AND
sf.serviceId = ts2.serviceId and
ts2.serviceTypeId = '2'
GROUP BY f.facilitatorName
ありがとうございました..