2012-01-20 4 views
2

음성 회의를 사용하는 모든 MSFT Lync 사용자 및 사용 횟수를 반환하려고합니다. 테이블에 User1과 User2가 모두 있고 한 곳에서 원하는 컨퍼런스에 참여했기 때문에 UNION을 사용해야합니다.SQL Union with COUNT() 함수가 예상 결과를 반환하지 않음

SELECT U.UserUri, 
     COUNT(U.UserUri) AS COUNT 
FROM SessionDetails AS S 
     INNER JOIN Users U 
     ON S.User1Id = U.UserId 
WHERE MediaTypes = 48 
GROUP BY U.UserUri 
UNION 
SELECT U.UserUri, 
     COUNT(U.UserUri) AS COUNT 
FROM SessionDetails AS S 
     INNER JOIN Users U 
     ON S.User2Id = U.UserId 
WHERE MediaTypes = 48 
GROUP BY U.UserUri 

반환 된 결과는 두 개의 수를 합계로, 두 번 목록에 나타나는 하나 이상의 회의에 참여한 사람이 : 여기

는 SQL이다. 사실, 이것을 입력 한 후에 User1Id와 User2ID로 그룹화해야합니다. 한 사람이 9 회 대화를했으나 6 회의 대화가 있었을 경우 그들은 User1 6 회와 User2 3 회가되어 두 개의 다른 그룹을 만들었습니다.

이제는 왜,하지만 어떤 아이디어를 중복 UserUri 중복 반환하는 방법 알아? 어떤 도움을 주셔서 감사합니다!

답변

5

UNION 후에 집계 하시겠습니까?

SELECT 
    T.UserUri, COUNT(*) 
FROM 
    (
    SELECT U.UserUri 
    FROM SessionDetails AS S 
      INNER JOIN Users U 
      ON S.User1Id = U.UserId 
    WHERE MediaTypes = 48 
    UNION ALL 
    SELECT U.UserUri 
    FROM SessionDetails AS S 
      INNER JOIN Users U 
      ON S.User2Id = U.UserId 
    WHERE MediaTypes = 48 
    ) T 
GROUP BY 
    T.UserUri 

편집 : 고정 별칭, ALL UNION에 추가

+0

흠 좋은 생각처럼 보이지만 그것은 나에게 오류주고있다 : "잘못된 열 이름 'U'"를. select 문에서 U가 맘에 들지 않는 것 같습니다. – tarheels058

+0

실제로 T.U가 마음에 들지 않습니다. 첫 번째 select 문에서 – tarheels058

+0

이 솔루션은 작동하지 않습니다. 유니온 뒤에 집계 한 경우 UserUri 목록이고 각 카운터의 개수는 1입니다. – tarheels058

관련 문제