テーブル:tbl1
変更を繰り返しフィールド
フィールド:id
、name
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
テーブル:tbl1
変更を繰り返しフィールド
フィールド:id
、name
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
注意することで名= 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
これがあなたの質問に答えなかったかどうかお知らせください。お役に立てれば!
はいこれはいいですが、これはどうすればlinqでできますか – sdFRRR
linqを使用している場合は、SQLクエリをうまく実行できます。 myContext.ExecuteQuery( "SQL HERE")。 LINQを使用する本当の理由がない限り、SQLを使用する方が簡単な解決策だと思います。 (http://msdn.microsoft.com/en-us/library/bb399403.aspx) – mellamokb
繰り返し回数を確認する方法 – ashkufaraz
これは本当の問題ではありません。何を試しましたか? – JNK