2012-04-13 58 views
0

我有三个表性别计联接查询

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个事件的表。

任何建议将不胜感激。

+0

看来你缺少活动和成员之间的联系。你需要考虑你的'男性'''女性'结果子查询。 '(从成员where性别='m'和memberId中选择计数(性别)(从member_events where member_events .eventID = Event.EventId中选择memberId)'其中'member_events'是保存成员和事件之间关系的表他们在英国注册。 – Dutchie432 2012-04-13 12:31:43

回答

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