2010-07-27 6 views
0

j'ai une table comme ceci:table de mise à jour sur la base de 2 tables avec RowID est aussi commun

RowID; ListDescription1; ListNormalisedDescription1; 
1  XXXX  YYYY NULL 
2  ZZZZZ    NULL 

I a fait une transformation/normalisation complexe (suppression des espaces, en remplacement de l'espace et split) et arrive à faire la même transformation des données en:

RowID; NormalisedItemDescrption1; 
1  XXXX 
1  YYYY 
2  ZZZZZ 

Comme vous pouvez le voir le point commun entre ces 2 tables est RowID.

Je veux mettre à jour ListNormalisedDescription1 basé sur la table deviennent ainsi:

RowID; ListDescription1; ListNormalisedDescription1; 
1  XXXX  YYYY XXXX;YYYY 
2  ZZZZZ    ZZZZZ 

S'il vous plaît noter que le séparateur est « ; » J'essaie d'éviter le curseur si c'est possible.

Merci

+0

Mais si votre puis prendre 'valeurs ListNormalisedDescription1' et les transformer en une chaîne délimité par virgule alors il ne normalise plus ...? – onedaywhen

+0

@OneDayWhen: Nous utilisons le mauvais terme "normalisé" pour cela. :) – dcpartners

Répondre

2

SQL Server 2005+ En supposant, utilisez:

UPDATE table 
    SET ListDescription1 = STUFF(ISNULL(SELECT ' ' + x.NormalisedItemDescrption1 
             FROM NORMALIZED_TABLE x 
             WHERE x.rowid = rowid 
            GROUP BY x.NormalisedItemDescrption1 
             FOR XML PATH ('')), ''), 1, 2, ''), 
     ListNormalisedDescription1 = STUFF(ISNULL(SELECT ';' + x.NormalisedItemDescrption1 
                FROM NORMALIZED_TABLE x 
                WHERE x.rowid = rowid 
               GROUP BY x.NormalisedItemDescrption1 
               FOR XML PATH ('')), ''), 1, 2, '') 
+0

J'utilise votre approche en utilisant STUFF et XML PATH avec quelques modifications. Merci pour cela. – dcpartners

Questions connexes