選択したユーザーの電子メール 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
件名と内容が違っていたらすみません。説明に自信がありませんでした。
望ましい結果:
「トム・リード」について質問した場合
Output: Multiple
「Tom Lew」について問い合わせた場合
Output: Multiple
「ジャック・スタン」について質問された場合
Output: jstan@hotmail.com