【问题标题】:Compare subselect value with value in master select将子选择值与主选择中的值进行比较
【发布时间】:2009-02-06 03:47:11
【问题描述】:

在 MS Access 中,我有一个查询,我想使用外部查询中的列作为内部查询中的条件:

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 代码的情况下做到这一点...有什么想法吗?

【问题讨论】:

  • 选择列表中的复杂子查询意味着什么?目前尚不清楚,但这可能是该人在参加 Event_ID 8 的第一天之后参加 Event_ID 8 的次数。我们无法判断某人是否可以在一天内参加多次,等等。
  • 就是这样 - 我们想计算可能日期在他们第一次参加之后的总参加人数,这可能不是活动开始的时间。假设每天只有一次出席。

标签: sql ms-access subquery


【解决方案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;

【讨论】:

  • 这可能越来越接近,但它丢失了 event_id=8 部分,并且对可能的日期进行了独特的搜索。但我认为这是在正确的轨道上,将子选择逻辑放在从区域而不是选择区域中。
  • 我不记得这个问题是否得到解决,但这个答案是正确的。
【解决方案2】:

你能改吗

B.attendance_date >= FirstOfattendance_date

B.attendance_date >= First(A.attendance_date)

【讨论】:

  • 很有趣,但是它说你不能在 where 子句中使用聚合函数。
  • 聚合函数只能在 HAVING 子句中用作条件。由于您使用的是聚合相关子查询中的值,因此您必须使用别名,因为您使用它的 SELECT 语句不是聚合查询。
猜你喜欢
  • 2021-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-28
  • 2014-02-18
相关资源
最近更新 更多