tsql不同计数子查询

tsql不同计数子查询,tsql,subquery,distinct,Tsql,Subquery,Distinct,我正在使用SSMS 2008,需要使用子查询返回唯一记录/客户端的计数。我该怎么做?目前,我正在返回整个数据集上的所有唯一记录,而不是每个客户端。以下是我当前的伪代码: SELECT A.Program, A.PEOPLE_ID, K.EVENT_NAME, A.Program2, A.Program3 (SELECT COUNT(DISTINCT K.EVENT_NAME) FROM #TEMP1 A, evolv_cs.dbo.facility_view F,

我正在使用SSMS 2008,需要使用子查询返回唯一记录/客户端的计数。我该怎么做?目前,我正在返回整个数据集上的所有唯一记录,而不是每个客户端。以下是我当前的伪代码:

    SELECT A.Program, A.PEOPLE_ID, K.EVENT_NAME, A.Program2, A.Program3
     (SELECT COUNT(DISTINCT K.EVENT_NAME) 
     FROM #TEMP1 A, evolv_cs.dbo.facility_view F, evolv_cs.dbo.people_x N, event_view K WITH (NOLOCK)
     WHERE F.group_profile_id = A.group_profile_id AND 
        K.event_definition_id = a.event_definition_id AND
        A.people_id = N.people_id
     GROUP BY K.EVENT_NAME) as DistinctEvent
     FROM #TEMP1 A
     JOIN event_view K WITH (NOLOCK) on K.event_definition_id = A.event_definition_id
     WHERE @START_DATE BETWEEN A.Enrolled_Date AND DATEADD(D, 14, A.Enrolled_Date)
     AND (@SERVICE IS NULL OR @SERVICE = K.event_name)
 GROUP BY 
A.Program, A.PEOPLE_ID, K.EVENT_NAME, A.Program2, A.Program3

好的,我现在编辑了上面的查询。我仍然需要每个客户端的事件名称

这里要使用的是用于不同计数的子句,而不是连接的子查询。下面的两个查询将为您提供所需的内容

SELECT A.PEOPLE_ID, COUNT(DISTINCT K.EVENT_NAME)
   FROM #TEMP1 A, event_view K WITH (NOLOCK)
   WHERE K.event_definition_id = a.event_definition_id
         AND @START_DATE BETWEEN A.Enrolled_Date AND DATEADD(D, 14, A.Enrolled_Date)
         AND (@SERVICE IS NULL OR @SERVICE = K.event_name)
   GROUP BY A.PEOPLE_ID

SELECT K.EVENT_NAME, COUNT(DISTINCT A.PEOPLE_ID)
   FROM #TEMP1 A, event_view K WITH (NOLOCK)
   WHERE K.event_definition_id = a.event_definition_id
         AND @START_DATE BETWEEN A.Enrolled_Date AND DATEADD(D, 14, A.Enrolled_Date)
         AND (@SERVICE IS NULL OR @SERVICE = K.event_name)
   GROUP BY K.EVENT_NAME

如果您需要将查询结果合并到单个结果集中,您应该能够使用UNION进行合并。

我喜欢您的解决方案,Brent,但是除了此(单个)结果集的这两个不同计数之外,我还需要包含更多字段。我该怎么做?如果这些字段是聚合(计数、最小值、最大值等),那么它们可以简单地添加到选择列表中。如果它们与分组字段(例如A.PEOPLEID)的粒度相同,则将它们添加到SELECT子句和GROUP BY子句中。您能给我更多的指导吗?这些附加字段的粒度与分组字段的粒度相同。但现在我得到了错误:msg512,级别16,状态1,第58行子查询返回的值超过1。当子查询在=、!=、=或者当子查询用作表达式时。请使用最新的查询更新您的帖子。请确保我理解,在此查询中,您希望输出与.Program、A.PEOPLE\u ID、A.Program2和A.Program3的每个不同组合相对应的不同事件名称值的计数?