Travailler sur la concaténation de strings avec la fonction parsename dans le server sql

J'ai une table d'employés et datatables de l'échantillon sont comme ça. J'utilise SQL Server 2008.

CREATE TABLE employee (name nvarchar(255)) insert into employee (name) values ('Alex,AlexMartin'), ('John,John'), ('Mayr,Mayr'), ('Shel,Sheila'), ('corolla,corolla,corolla3'), ('Mary4,Mary,Mary'), ('Justin,Justin,Justin'), ('Sara,Sara,Sara,Sara'), ('clarence,clarence,clarence458,clarence,clarence'), ('fiesta,fiesta,fiesta,fiesta,fiesta'), ('scorpio1,scorpio,scorpio,scorpio4,scorpio') 

Je veux supprimer une valeur si toutes les valeurs dans la string sont identiques exemple: John,John devrait être remplacé par 'John'. Si tous les noms dans la string ne sont pas égaux comme Shel,Sheila devrait conserver les deux valeurs. Pour cela j'utilise update employee set name=(select PARSENAME(REPLACE(name, ',', '.'), 2)) where (select PARSENAME(REPLACE(name, ',', '.'), 2)) like (select PARSENAME(REPLACE(name, ',', '.'), 1)) mais cela change Mary4,Mary,Mary à Mary . J'ai essayé des combinaisons pour 5, 4 et 3 noms mais il n'y a pas d'utilisation. En fait, pour cinq noms, ce code ne fonctionne pas du tout. Y a-t-il un moyen efficace de le faire?

Cela obtiendra datatables dans le format que vous searchz:

 CREATE TABLE #Employee (Name NVarChar(255)); INSERT INTO #Employee (Name) VALUES ('Alex,AlexMartin'), ('John,John'), ('Mayr,Mayr'), ('Shel,Sheila'), ('corolla,corolla,corolla3'), ('Mary4,Mary,Mary'), ('Justin,Justin,Justin'), ('Sara,Sara,Sara,Sara'), ('clarence,clarence,clarence458,clarence,clarence'), ('fiesta,fiesta,fiesta,fiesta,fiesta'), ('scorpio1,scorpio,scorpio,scorpio4,scorpio'), ('Another'); SELECT Name, CASE WHEN CHARINDEX(Name, ',') = 0 THEN Name WHEN REPLACE(REPLACE(Name, LEFT(Name, CHARINDEX(',', Name) - 1), ''), ',', '') = '' THEN LEFT(Name, CHARINDEX(',', Name) - 1) ELSE Name END Result FROM #Employee; DROP TABLE #Employee; 

Cela fonctionne en obtenant le prénom dans la list séparée par des virgules. Selon vos besoins, tous les éléments doivent être identiques afin de condenser la list, peu importe l'élément de la list que nous utilisons pour la comparaison.

Toutes les occurrences du premier élément sont supprimées de la list. Ensuite, toutes les virgules sont supprimées. Si la valeur résultante est vide (ie '' ) alors nous soaps que tous les éléments sont identiques. Dans ce cas, le premier élément est utilisé comme valeur de Result . Sinon, nous returnnons la list originale inchangée.

EDIT : Certaines de vos données ne doivent pas avoir un , alors j'ai mis à jour la réponse pour prendre soin de cela. Il returnnera juste la même input si un délimiteur n'existe pas.