2012-01-20 14 views
2

音声会議を使用したすべてのMSFT Lyncユーザーおよび使用回数を返すようにしています。私はUNIONを使用する必要があります。なぜなら、テーブルにはUser1とUser2がいて、両方とも1つの列に必要な会議に参加したからです。ここでSQL Union with COUNT()関数が期待どおりの結果を返さない

はSQLです:

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 

返された結果は、2点の数の合計で、二回リストに表示されて複数の会議に参加した誰もが持っています。実際には、これを入力した後、User1IdとUser2IDでグループ化する必要があります。ある人が9回の会話を持っていても6件しか入院しなかった場合、2人の異なるグループを作成して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が嫌いです。最初の選択ステートメントで – tarheels058

+0

このソリューションは機能しません.Union後に集計した場合、UserUriのリストのみであり、それぞれのカウントは1です。 – tarheels058

関連する問題