2011-10-05 2 views
0

SSMS 2008을 사용하고 있으며 하위 레코드를 사용하여 고유 레코드/클라이언트 수를 반환해야합니다. 어떻게해야합니까? 현재 클라이언트마다가 아니라 전체 데이터 세트 전체에서 모든 고유 레코드를 반환합니다. 현재 내 의사 코드는 다음과 같습니다.tsql distinct count 하위 쿼리

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 

좋아, 지금 위 쿼리를 편집했습니다. 나는 여전히 클라이언트 당 event_name을 원한다.

+0

이 쿼리에서 A.Program, A.PEOPLE_ID, A.Program2 및 A.Program3의 각 고유 한 조합에 해당하는 고유 EVENT_NAME 값의 개수를 출력하겠습니까? –

답변

2

조인 된 하위 쿼리 대신 고유 카운트에 대해 GROUP BY 절을 사용합니다. 다음 두 가지 쿼리를 통해 원하는 것을 얻을 수 있습니다. 당신은 하나의 결과 집합에 쿼리의 결과를 결합해야하는 경우

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으로 그렇게 할 수 있어야합니다.

+0

해결책 (Brent)이 마음에 들지만,이 (단일) 결과 집합에 대해이 두 가지 별개 개수에 더 많은 필드를 추가해야합니다. 내가 어떻게 그럴 수 있니? – salvationishere

+0

해당 필드가 집계 (COUNT, MIN, MAX 등)이면 SELECT 목록에 간단히 추가 할 수 있습니다. 그룹화 필드 (예 : A.PEOPLEID)와 동일한 세분성을 가진 경우 SELECT 절 및 GROUP BY 절에 추가하십시오. –

+0

더 많은 방향을 알려줄 수 있습니까? 이러한 추가 필드는 그룹화 필드와 동일한 세분성을 갖습니다. 하지만 이제 오류가 발생합니다. – salvationishere