2011-08-15 6 views
0

テーブル:tbl1変更を繰り返しフィールド

フィールド:idname

id  name
1  a 
1  a 
1  a 
1  b 

私は=名前とID(ID = 1、名前= || IDを繰り返してきた場所を好きに1、name = a || id = 1、name = a)。

に変更

id = 1、name = a1 || id = 1、name = a2 || ID = 1、これは質問の意味を解釈するの私の最高の試みであるとLINQの& &のSQLServer

+0

これは本当の問題ではありません。何を試しましたか? – JNK

答えて

1

注意することで名= A3

。私は基本的にオフの場合に応答してください:)これはおそらくLINQソリューションのために少し複雑すぎるので、出力を更新するためにワンタイムSQLクエリを使用するソリューションを提案しました。

idと名前のテーブルを生成するクエリは次のとおりです。idとnameが同じ場合は常にインデックス値が追加されます。これは、行番号を生成し、同じ値をカウントすることによって機能します。同じ値の数が1より大きい場合、行番号は名前に追加される索引を生成するために使用されます。一意の識別子がない場合、この方法でレコードを更新することは不可能であるため、これは既存のテーブルを変更できないことに注意してください。

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 

次の出力が生成されます:

TBL1には、以下の入力が含まれている場合、このクエリで

;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 

:あなたは出力には、この代わりに、新しいテーブルや使用にする必要があります

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 

これがあなたの質問に答えなかったかどうかお知らせください。お役に立てれば!

+0

はいこれはいいですが、これはどうすればlinqでできますか – sdFRRR

+0

linqを使用している場合は、SQLクエリをうまく実行できます。 myContext.ExecuteQuery( "SQL HERE")。 LINQを使用する本当の理由がない限り、SQLを使用する方が簡単な解決策だと思います。 (http://msdn.microsoft.com/en-us/library/bb399403.aspx) – mellamokb

+0

繰り返し回数を確認する方法 – ashkufaraz

関連する問題