0

重複した電子メールをフィルタリングして、すべての列にこれらの重複した電子メールに関連付けられたデータが表示されるようにする方法を探していくつかの調査を行いましたが、これに役立つ答えが見つかりません.

現在、次のコードを使用してデータを取得しています。

SELECT
    Email, COUNT(Email) AS dup_count

FROM
    [cem_farmers_masterinvitelist].[dbo].InviteList

GROUP BY
    Email

HAVING
    (COUNT(Email) > 1)

Order by Email

次に、xxxxxxの行数が得られます。次に、これらの重複した電子メールに関連付けられているデータ (列) を取得できるようにしたいと考えています。

SELECT * FROM [marks_party_MasterInvite] .[dbo].[InviteList]
WHERE
    Email in(Select Email FROM [marks_party_MasterInvite].[dbo].[InviteList] GROUP BY Email HAVING COUNT(Email)>1)

行数が一致しないため、何か間違っていることはわかっています。

だからどんな助けでも大歓迎です!

みんなありがとう、

4

3 に答える 3

1

ウィンドウ関数を使いたい。以下は、各行にカウントを追加します。次に、whereフィルターを使用してすべての列を取得できます。

SELECT il.*
FROM (select il.*, count(*) over (partition by email) as cnt
      from [cem_farmers_masterinvitelist].[dbo].InviteList
     ) il
where cnt > 1
Order by Email

すべての行をフェッチすると重複するため、カウントは一致しません。最初のクエリでは、個別のメールを取得しています。

于 2013-03-27T01:13:54.733 に答える
0

行数は異なります。関連するすべての重複レコードの数を取得する場合は、*WITH rollup *を使用できます。魔女は数を合計します...この数は、2番目のクエリの行数と一致する必要があります...

SELECT
    Email, COUNT(Email) AS dup_count
FROM
    [cem_farmers_masterinvitelist].[dbo].InviteList
GROUP BY
    Email WITH ROLEUP
HAVING
    (COUNT(Email) > 1)
Order by Email
于 2013-03-27T01:37:09.517 に答える
0

ソース テーブルを結合して、ソースについて生成したばかりの知識にします。

SELECT *
FROM [cem_farmers_masterinvitelist].[dbo].InviteList src

INNER JOIN
(
    SELECT
        Email, COUNT(Email) AS dup_count

    FROM
        [cem_farmers_masterinvitelist].[dbo].InviteList

    GROUP BY
        Email
) qDupes
ON qDupes.email = src.email AND qDupes.dup_count > 1
于 2013-03-27T01:15:09.757 に答える