SQL - 如何在SELECT期间从其他表中获取计数

时间:2015-08-24 06:16:34

标签: sql-server

我一直在寻找现有的答案,但根据我的理解,没有匹配(可能会有,但术语/方法没有意义,所以我跳过它)。

方案: 我有3张桌子:

  • 会员,
  • ActivityStart,
  • ActivityComplete

Members表包含会员资料信息

ActivityStart表会在成员启动和活动时记录一个条目,为其提供唯一的活动代码并记录成员的ID以及时间戳。

ActivityComplete表记录相同的信息,但作为具有成员ID和时间戳的活动的退出 - 但是该表还有一个状态字段,用于完整或部分完成。

我需要做的是导出成员个人资料数据以及他们在Start表中的次数以及他们在Exit表中作为部分完成的次数以及完整完成的次数

所以显然我从

的基本查询开始
SELECT MemberID, FNAME, EMAIL FROM Members

但我很困惑,我甚至开始根据每条记录的MemberID从其他表中获取计数。

任何人都可以帮我指出正确的方向吗?

我正在使用SQL2012。

2 个答案:

答案 0 :(得分:0)

这样的事情:

SELECT M.MemberID, FNAME, EMAIL, 
    StartCount = SUM(CASE WHEN Ast.ID IS NOT NULL THEN 1 ELSE 0 END),
    FullCompleteCount = SUM(CASE WHEN AComp.ID IS NOT NULL AND AComp.Complete = 'Full' THEN 1 ELSE 0 END),
    PartialCompleteCount = SUM(CASE WHEN AComp.ID IS NOT NULL AND AComp.Complete = 'Partial' THEN 1 ELSE 0 END),
FROM Members M
    LEFT JOIN ActivityStart ASt ON A.MemberID = M.MemberID
    LEFT JOIN ActivityComplete AComp ON AComp.MemberID = M.MemberID 
GROUP BY 
    M.MemberID, FNAME, EMAIL

答案 1 :(得分:0)

我认为你可以这样做:

  SELECT MemberID, FNAME, EMAIL ,
  (select COUNT (*) from ActivityStart start where start.MemberID=m.MemberID) ActivityStartCount,
  (select COUNT (*) from ActivityComplete  compl where compl.MemberID=m.MemberID) ActivityCompleteCount
FROM Members m