2009-02-06 48 views
0

在MS访问,我有一个查询,我想在外部查询使用列作为内部查询的条件:比较子选择值与主值选择

SELECT P.FirstName, P.LastName, Count(A.attendance_date) AS CountOfattendance_date, 
     First(A.attendance_date) AS FirstOfattendance_date, 
     (SELECT COUNT (*) 
      FROM(SELECT DISTINCT attendance_date 
       FROM tblEventAttendance AS B 
       WHERE B.event_id=8 
        AND B.attendance_date >= FirstOfattendance_date) 
     ) AS total 
FROM tblPeople AS P INNER JOIN tblEventAttendance AS A ON P.ID = A.people_id 
WHERE A.event_id=8 
GROUP BY P.FirstName, P.LastName 
; 

的关键点是FirstOfattendance_date - 我希望深入的比较在主选择的每次迭代中使用值。显然这不起作用,当我尝试运行它时,它会要求我输入FirstOfattendance_date的值。

我想这样做,而不诉诸VB代码......任何想法?

+0

select-list中复杂的子查询是什么意思?目前尚不清楚,但可能是该人员在出席Event_ID 8的第一天之后参加了Event_ID 8的次数。我们无法判断某人是否可以在一天内多次出席以及其他活动。 – 2009-02-06 05:36:33

+0

就是这样 - 我们想要统计他们第一次参加之后可能的日期总人数,这可能不是活动开始时的日期。假设每天只有一次出勤。 – DGM 2009-02-13 05:52:57

回答

1

如何:

SELECT 
    p.FirstName, 
    p.LastName, 
    Count(a.attendance_date) AS CountOfattendance_date, 
    First(a.attendance_date) AS FirstOfattendance_date, 
    c.total 
FROM (
    tblPeople AS p 
INNER JOIN tblEventAttendance AS a ON 
    a.people_id = p.ID) 
INNER JOIN (SELECT people_id, Count (attendance_date) As total 
      FROM (
       SELECT DISTINCT people_id,attendance_date 
       FROM tblEventAttendance) 
      Group By people_id) AS c ON 
    p.ID = c.people_id 
GROUP BY 
    p.ID, c.total; 
0

你能不能改

B.attendance_date> = FirstOfattendance_date

B.attendance_date> =第一(A.attendance_date)

+0

有趣,但它说你不能在where子句中有一个聚合函数。 – DGM 2009-02-06 04:10:07