2010-07-20 5 views
0

J'ai une table avec les données échantillonnées suivantes:Réduire et fusionner des lignes en double

Name Color 

Alice Green 
Bob  Black 
Chris Green 
Chris Black  
David Red 
Peter Blue 
Simon Blue 
Simon Red 
Simon Green 

En fin de compte, je veux réduire la table en consolidant la colonne de couleur comme:

Name Color 

Alice Green 
Bob  Black 
Chris Green, Black 
David Red 
Peter Blue 
Simon Blue, Red, Green 

tels que Nom peut devenir unique.

Le tableau n'a pas clé primaire, je suis arrivé jusqu'à créer une nouvelle colonne à l'aide ROW_NUMBER pour distinguer les doublons, mais ne sais pas quoi faire .:

rownumber Name Color 

1   Alice Green 
1   Bob  Black 
1   Chris Green 
2   Chris Black  
1   David Red 
1   Peter Blue 
1   Simon Blue 
2   Simon Red 
3   Simon Green 
+1

Les tables normalisées sont normalement considérées comme une bonne chose. – Oded

+0

Hmm ... C'est parce que la "table" ci-dessus est en fait un résultat de requête de JOINING à beaucoup de vues, et je suis en train d'envisager une refonte complète si j'en ai la permission. Encore merci de souligner que la normalisation est une bonne pratique dans le monde DB. Je ne suis pas essentiellement un programmeur de base de données, donc je ne suis pas bon en SQL du tout parler embarrassant. – Chris

Répondre

0

J'ai adopté l'approche here

avec une variable de table pour tenir le résultat temporaire mis au travail (bidouille) à partir.

Trié! Pourquoi voulez-vous _denormaliser_ votre base de données?

1

Ne faites pas cela. Au lieu de cela, normaliser vos tables plus loin, par ex. une table Person, Preference et Color (où Preference, si c'est le bon nom pour la relation, a des clés étrangères à Person et Color). De cette façon, vous évitez les risques d'incohérences (vous pouvez rendre les noms de personnes uniques si vous le souhaitez, mais devrait rendre les noms de couleur uniques). EDITED: si vous obtenez ceci à partir d'une requête de jointure, je suppose que les données sont raisonnablement cohérentes, donc la normalisation n'est pas un problème. Serait-il possible de modifier la requête de jointure à GROUP sur Name à la place? Beaucoup plus propre que de pirater un jeu de résultats, vraiment!

+0

(Bon Dieu, j'ai effectivement réussi une orthographe de la couleur en Amérique.) Maintenant, ** ça va pouvoir! :-) –

+0

Je me bats avec la même chose. Bravo à cet homme :) – Oded

+0

Eh bien, j'ai oublié de mentionner qu'il s'agit d'un ensemble de résultats stocké dans une variable de table, donc je ne suis pas sûr que la normalisation serait utile. Je dois juste trouver des moyens d'identifier les lignes en double, puis utiliser la fonction coalesce pour construire une chaîne de tous les "Color" et le mettre dans une nouvelle colonne en quelque sorte, mais vraiment pas comment s'y prendre. (J'ai essayé d'usurper l'identité d'un Américain en épelant la couleur comme couleur, et cela m'a demandé un peu de contrôle de soi, je dois dire. – Chris

Questions connexes