簡體   English   中英

帶有COUNT()函數的SQL Union未返回預期結果

[英]SQL Union with COUNT() Function not returning expected results

我正在嘗試返回所有使用語音會議的MSFT Lync用戶及其使用次數。 我必須使用UNION,因為該表的User1和User2都參加了我想要在一欄中顯示的會議。

這是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  

返回的結果是,參加過一個以上會議的任何人兩次出現在列表中,共有兩個計數。 實際上,在鍵入此內容后,必須按User1Id和User2ID對其進行分組。 如果一個人有9個對話,但只發起了6個對話,則它們將分別是User1 6次和User2 3次,從而創建兩個不同的分組。

現在我知道為什么了,但是有什么主意如何不返回重復的UserUri? 任何幫助,不勝感激!

聚集在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM