Je rencontre des problèmes avec une requête SQL que je dois construire pour afficher des données dans une grille.Numéros de ligne utilisant le groupe par et plusieurs colonnes
J'ai cette table temporaire comme ci-dessous (je mets des numéros au lieu de l'adresse e-mail pour l'exemple):
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
J'ai besoin de mettre à jour la table afin de définir le GroupID comme décrit ci-dessous: Si email1 ou email2 correspond à n'importe quel autre enregistrement, cet enregistrement doit avoir le même groupId que l'autre. Par exemple (en utilisant le tableau ci-dessus):
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
J'ai essayé quelque chose comme ça:
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)
Mais cela ne fonctionne pas un je compte ... Par exemple le cas où il est le Email2 c'est égal à l'Email 1 n'est pas reconnu comme le même groupe ... Comment puis-je faire fonctionner cette requête comme je le voudrais? Est-ce même possible?
[EDIT] 2013/15/17 14:15: En acte, les règles, je voulais dire « Si EMAIL1 ou email 2 matchs EMAIL1 ou mail2 de tout autre document devrait l'être de la même groupID »
Je pense que les règles sont incomplètes: "* Si email1 ou email2 correspond à un autre enregistrement, cet enregistrement doit avoir le même groupId que l'autre *". Avec juste cette règle, il serait juste de donner à toutes les lignes le même GroupID. Ce qui est beaucoup plus simple et plus facile à mettre en œuvre, mais probablement pas ce dont vous avez besoin. Alors quoi d'autre avez-vous besoin? – RBarryYoung
Quel RDBMS (SQLite, SQLServer, MySQL, etc) est-ce? –