1

選択したユーザーの電子メール ID のコンマ区切りリストを返す次のクエリがあります。

CREATE TABLE TEST
(
    ID INT PRIMARY KEY,
    FIRSTNAME VARCHAR(30) NOT NULL,
    LASTNAME VARCHAR(30) NOT NULL,
    EMAIL VARCHAR(50)
)

INSERT INTO TEST VALUES (1, 'Tom', 'Lew', 'tom@hotmail.com')
INSERT INTO TEST VALUES (2, 'Tom', 'Lew', 'tom@hotmail.com')
INSERT INTO TEST VALUES (3, 'Jack', 'Stan', 'jstan@hotmail.com')
INSERT INTO TEST VALUES (4, 'Tom', 'Reed', 'tomreed@hotmail.com')
INSERT INTO TEST VALUES (5, 'Tom', 'Reed', 'tomr@hotmail.com')
INSERT INTO TEST VALUES (6, 'Tom', 'Reed', 'treed@hotmail.com')

DECLARE @result VARCHAR(MAX)

    SELECT @result = COALESCE(@result + ',', '') + [EMAIL]
    FROM [TEST]
    WHERE [FirstName] = 'Tom' AND [LastName] = 'Reed'

    SELECT @result

1 つの値のみを返すようにクエリを変更する必要があります。「Tom Reed」に関連付けられている電子メール ID が 1 つしかない場合は 1 つの電子メール ID、「Tom Reed」に複数の電子メール ID が見つかった場合は文字列「multiple」

どういうわけか望ましい結果を得ることができましたが、パフォーマンスについてはわかりません。実際のシナリオでは、このテーブルには数千のレコードがあり、他のテーブルに結合されます。

SELECT
    DISTINCT
    CASE 
        WHEN CNT = 1 THEN EMAIL
        ELSE 'MULTIPLE'
    END
FROM (SELECT 
    ID, EMAIL,
    COUNT(*) OVER() CNT
    FROM TEST
    WHERE [FirstName] = 'Tom' AND [LastName] = 'Reed') T

件名と内容が違っていたらすみません。説明に自信がありませんでした。

望ましい結果:

  1. 「トム・リード」について質問した場合

    Output: Multiple
    
  2. 「Tom Lew」について問い合わせた場合

    Output: Multiple
    
  3. 「ジャック・スタン」について質問された場合

    Output: jstan@hotmail.com
    
4

1 に答える 1

2

これはうまくいくと思います(テストされていません):

SELECT DISTINCT
    FirstName, 
    LastName,  
    CASE 
      WHEN COUNT(Email) OVER (PARTITION BY FirstName,LastName) = 1 
      THEN Email 
      ELSE 'Multiple' END
FROM Test

そして、渡されたパラメータで単語だけが必要な場合:

SELECT DISTINCT
    CASE 
      WHEN COUNT(Email) OVER (PARTITION BY FirstName,LastName) = 1 
      THEN Email 
      ELSE 'Multiple' END
FROM Test
WHERE FirstName = 'Tom' 
   AND LastName = 'Reed'

これにより、電子メールまたは複数の単語が返されます。

于 2013-01-16T19:31:21.477 に答える