2016-09-03 3 views
1

同じnicknameのレコードをフィルタリングしたいが、別のレコードがあるcontactIdだが、できなかった。同じfooであるがブー別のレコードを見つける

SELECT 
    nickname, contactId, COUNT(*) 
FROM 
    UserProfileContacts 
GROUP BY 
    nickname, contactId 
HAVING 
    COUNT(*) > 1 

これは私が結果として期待しているものです。

userId A | nickname B | contactId C 
userId A | nickname B | contactId D 
userId B | nickname C | contactId F 
userId B | nickname C | contactId G 
+0

をどのDBMSを使用していますか? –

+0

ms sql、管理スタジオ – Mert

答えて

1

group byからcontactidを削除し、指定したユーザIDとニックネームあたりcontactidの明確な発生をカウント。 SQL Serverを使用している場合は

SELECT 
    userid, nickname, COUNT(distinct contactId) contactid_count 
FROM 
    UserProfileContacts 
GROUP BY 
    userid, nickname 
HAVING 
    COUNT(distinct contactId) > 1 

だけやるcontactidを選択するには、

SELECT u.userid,u.nickname,u.contactid 
FROM UserProfileContacts u 
JOIN (
SELECT 
    userid,nickname 
FROM 
    UserProfileContacts 
GROUP BY 
    userid,nickname 
HAVING 
    COUNT(distinct contactId) > 1) t ON t.userid = u.userid AND t.nickname = u.nickname 
+0

これは同じcontactIdsをもたらし、contactIdsは異なっている必要があります。また、ニックネームを持つuserIdを追加することもできます。 – Mert

+0

@Mert ..編集したバージョンを見る –

0

は、上)(CTEで以下のクエリを使用してカウント()..

;WITH cte_1 
    AS 
    (SELECT * 
     , count(contactid) over(partition by userid,nickname order by userid,nickname) cnt 
    FROM UserProfileContacts) 
    SELECT DISTINCT userid,nickname,contactId 
    FROM cte_1 
    WHERE cnt>1 
関連する問題