グリッドにデータを表示するために作成しなければならない SQL リクエストに問題があります。
以下のような一時テーブルがあります(例では、メールアドレスの代わりに数字を入れています):
GroupID | Email1 | Email2
null | 1 | 2
null | 1 | 2
null | 1 | null
null | 3 | 1
null | 2 | 2
null | 4 | 2
null | 5 | 6
null | 6 | null
以下で説明するように、GroupID を設定するためにテーブルを更新する必要があります。email1 または email2 が他のレコードと一致する場合、このレコードは他のレコードと同じ groupId を持つ必要があります。例(上の表を使用):
GroupID | Email1 | Email2
**1** | 1 | 2
**1** | 1 | 2
**1** | 1 | null
**1** | 3 | 1
**1** | 2 | 2
**1** | 4 | 2
**2** | 5 | 6
**2** | 6 | null
私はそのようなことを試しました:
UPDATE a
SET a.GroupId = b.GroupId
FROM #temp a
INNER JOIN (SELECT Email,
ROW_NUMBER() OVER (ORDER BY ISNULL(Email,'zzzzzzzz')) GroupId
FROM (SELECT Email1 Email
FROM #temp
GROUP BY Email1
UNION ALL
SELECT Email2 Email
FROM #temp
GROUP BY Email2
) c
GROUP BY Email
) b
ON a.Email1 = b.Email OR
a.Email2 = b.Email OR
(b.Email IS NULL AND a.Email1 IS NULL AND a.Email2 IS NULL)
しかし、これは私が意図している機能ではありません...たとえば、Eメール1と等しいのがEmail2である場合、同じグループとして認識されません...どうすればこのリクエストを希望どおりに機能させることができますか? それは可能ですか??
[編集] 2013/15/17 14:15 :実際には、ルールについては、「email1またはemail 2が他のレコードのemail1またはemail2と一致する場合、同じgroupIDである必要があります」という意味でした