2

音声会議を使用したすべての MSFT Lync ユーザーとその使用回数を取得しようとしています。テーブルには、必要な会議に参加した User1 と User2 が 1 つの列に含まれているため、UNION を使用する必要があります。

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 回表示され、合計 2 回表示されます。実際には、これを入力した後、User1Id と User2ID でグループ化する必要があります。ある人が 9 回の会話を行い、そのうち 6 回しか開始しなかった場合、User1 は 6 回、User2 は 3 回になり、2 つの異なるグループが作成されます。

理由はわかりましたが、重複した UserUri を返さない方法はありますか? どんな助けでも大歓迎です!

4

1 に答える 1

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に追加

于 2012-01-20T20:42:41.930 に答える