0

私は3つのテーブルを持っています

Member - MemberID, gender, etc
Venue - VenueID, City, VenueName, etc
Event - EventID, EventDate, etc

都市がグラスゴーで、2012 年 1 月の期間の各イベントの男性と女性の数を示すクエリを表示しようとしています。

これまでの私の結果は です。

SELECT Venue.VenueName, Venue.City, Event.Eventdate, (select count(gender) from member where gender = 'm') AS MaleTotal, (select count(gender) from member where gender = 'f') AS FemaleTotal
FROM Venue INNER JOIN Event ON Venue.VenueID = Event.FKvenueID
WHERE Venue.City='Glagow' and Month(eventdate)=1 and year(partydate) = 2011;

これにより、次の表が生成されます

VenueName-ABC Venue, XYZVenue;

City- Glasgow, Glasgow;

Partydate- 04/01/2012, 05/01/2012   

MaleTotal-4,4   

FemaleTotal-3,3

これは間違っています。メンバー テーブルには合計 7 つのエントリしかなく、それぞれが 1 つのイベントにしか参加していません。

どんな提案でも大歓迎です。

4

1 に答える 1

0

メンバーとイベントの間に多対多の関係があると仮定すると、次のようなことを試すことができます

SELECT Venue.VenueName, 
       Venue.City, 
       Event.Eventdate,
       SUM (CASE gender WHEN 'm' THEN 1 ELSE 0 END) AS MaleTotal, 
       SUM (CASE gender WHEN 'f' THEN 1 ELSE 0 END) AS FemaleTotal 
FROM Venue INNER JOIN 
     Event ON Venue.VenueID = Event.FKvenueID INNER JOIN
     Event_Member ON Event_Member.EventID = Event.EventID INNER JOIN
     Member ON Member.MemberID = Event_Member.MemberID
WHERE Venue.City='Glagow' 
  and Month(eventdate)=1 
  and year(partydate) = 2011
GROUP BY Venue.VenueName, 
         Venue.City, 
         Event.Eventdate
于 2012-04-13T12:37:10.510 に答える