1

プリント ショップに送信して印刷してもらうメーリング リストを作成しています。重複した住所をすべて削除する方法を見つけましたが、重複した住所に住んでいる人の名前を「姓」世帯に変更できる方法が必要です。重複した住所は、そこに住んでいる 2 人の住所を持っていることを示しているので、2 通のメールを送る代わりに、1 通だけを 2 人宛てに送ります。前もって感謝します

これは私がこれまでに持っているものです

    SELECT First_Name + ' ' + Last_Name AS Name, Mail_Address_1, phone
    FROM    Personal
    GROUP BY Mail_Address_1
    HAVING  COUNT(Mail_Address_1) > 1
    order by  Mail_Address_1
4

2 に答える 2

0

これは、ウィンドウ関数ROW_NUMBER()COUNT(*) OVER()

SELECT  CASE WHEN Duplicates = 1 THEN First_Name + ForeName ELSE 'The ' + Last_name + ' Household' END [Name]
        Mail_Address_1,
        Phone
FROM    (   SELECT  First_name, 
                    Last_name,
                    Mail_Address_1,
                    Phone,
                    ROW_NUMBER() OVER(PARTITION BY Mail_Address_1 ORDER BY Last_name) [RowNum],
                    COUNT(*) OVER(PARTITION BY Mail_Address_1) [Duplicates]
            FROM    Personal
            WHERE   Registered_Voter = 1
        ) p
WHERE   RowNum = 1

ROW_NUMBER()結果を各住所のトップ エントリに制限し、COUNT適用するロジック (個人または世帯) を指定します。

于 2012-05-08T16:01:05.697 に答える
0

重複した行を取り出し、残りの行を変更して識別したい場合は、 t を使用できます

WITH DUPE (MAIL_ADDRESS_1)
AS
(
    SELECT MAIL_ADDRESS_1
        FROM    PERSONAL
        GROUP BY MAIL_ADDRESS_1
        HAVING  COUNT(MAIL_ADDRESS_1) > 1
)
SELECT FIRST_NAME, LAST_NAME , MAIL_ADDRESS_1, PHONE FROM PERSONAL WHERE MAIL_ADDRESS_1 NOT IN(
    SELECT MAIL_ADDRESS_1 FROM DUPE)
UNION
SELECT TOP 1 FIRST_NAME, LAST_NAME + '(DUPE MAIL)' AS LAST_NAME, MAIL_ADDRESS_1, PHONE 
FROM PERSONAL WHERE MAIL_ADDRESS_1 IN (SELECT MAIL_ADDRESS_1 FROM DUPE)

または単純な選択:

SELECT FIRST_NAME, LAST_NAME , MAIL_ADDRESS_1, PHONE FROM PERSONAL WHERE MAIL_ADDRESS_1 NOT IN(
    SELECT MAIL_ADDRESS_1
        FROM    PERSONAL
        GROUP BY MAIL_ADDRESS_1
        HAVING  COUNT(MAIL_ADDRESS_1) > 1
    )
UNION
SELECT TOP 1 FIRST_NAME, LAST_NAME + '(DUPE MAIL)' AS LAST_NAME, MAIL_ADDRESS_1, PHONE 
FROM PERSONAL WHERE MAIL_ADDRESS_1 IN (
    SELECT MAIL_ADDRESS_1
        FROM    PERSONAL
        GROUP BY MAIL_ADDRESS_1
        HAVING  COUNT(MAIL_ADDRESS_1) > 1
    )
ORDER BY  MAIL_ADDRESS_1
于 2012-05-08T15:44:45.710 に答える