2011-08-15 5 views
0

table: tbl1changement des champs répétés

Domaines: id, name

id  name
1  a 
1  a 
1  a 
1  b 

J'aime les endroits qui ont été répétées nom et Id (id = 1, name = a || id = 1, nom = a || id = 1, nom = a).

changement de

id = 1, name = a1 || id = 1, nom = a2 || id = 1, name = a3

LINQ & & SqlServer

+0

En l'état, ce n'est pas une vraie question. Qu'avez-vous essayé? – JNK

Répondre

1

Notez que ceci est ma meilleure tentative d'interpréter le sens de la question. S'il vous plaît répondez si je suis loin de base :) J'ai proposé une solution en utilisant une requête SQL unique pour mettre à jour la sortie, car c'est probablement un peu trop complexe pour une solution LINQ.

Voici une requête qui va générer une table d'ID et de noms où le nom est ajouté avec une valeur d'index chaque fois que l'ID et le nom sont identiques. Cela fonctionne en générant un numéro de ligne et en comptant les valeurs qui sont identiques. Si le nombre de valeurs identiques est supérieur à 1, le numéro de ligne est utilisé pour générer un index ajouté au nom. Notez que cela NE PEUT PAS modifier la table existante, car il est impossible de mettre à jour les enregistrements de cette manière lorsqu'il n'y a pas d'identifiant unique. Vous auriez à la sortie cela en une nouvelle table et utiliser à la place:

;with T as (
    select 
     row_number() over (order by id, name) as idx, 
     id, 
     name, 
     (select count(*) from [tbl1] b where b.id=a.id and b.name=a.name) as count 
    from 
     [tbl1] a 
) 
select 
    id, 
    case when 
     count > 1 then 
      name + 
       cast(
        (select count(*) from T b where b.id=T.id and b.name=T.name 
         and b.idx<T.idx) + 1 
       as varchar(50)) 
     else 
      name 
    end 
from 
    T 

Avec cette requête, si tbl1 contenait l'entrée suivante:

1 a 
1 a 
1 a 
1 b 
2 a 
2 a 
2 b 
2 b 
2 b 
2 c 
2 c 
2 d 
1 e 

La sortie suivante sera générée:

1 a1 
1 a2 
1 a3 
1 b 
1 e 
2 a1 
2 a2 
2 b1 
2 b2 
2 b3 
2 c1 
2 c2 
2 d 

S'il vous plaît laissez-moi savoir si cela n'a pas répondu à votre question. J'espère que cela t'aides!

+0

oui c'est un bon, mais comment cela peut-il par linq – sdFRRR

+0

Si vous utilisez linq, vous pouvez exécuter une requête SQL très bien. myContext.ExecuteQuery ("SQL ICI"). Je pense que l'utilisation de SQL est une solution plus simple, sauf si vous avez une très bonne raison d'utiliser LINQ. (http://msdn.microsoft.com/en-us/library/bb399403.aspx) – mellamokb

+0

comment peut voir le nombre de répété – ashkufaraz

Questions connexes