2011-08-15 36 views
0

表:tbl1改變重複的場

領域:idname

id  name
1  a 
1  a 
1  a 
1  b 

我喜歡一直重複姓名和身份證(ID = 1的地方,NAME = ||一個ID = 1,name = a || id = 1,name = a)。

更改爲

id = 1,name = a1 || id = 1,name = a2 || ID = 1,名稱= A3

通過LINQ的& & SqlServer的

+0

就目前來看,這不是一個真正的問題。你有什麼嘗試? – JNK

回答

1

注意,這是在解釋這個問題的意思我最好的嘗試。請回應,如果我離開基地:)我已經提出了使用一次性SQL查詢更新輸出的解決方案,因爲這對於LINQ解決方案可能有點太複雜。

這是一個查詢,它將生成一個id和名稱的表,其中名稱附加索引值,只要id和名稱相同。它通過生成一個行號和計數相同的值來工作。如果相同值的計數大於1,則行號用於生成追加到名稱的索引。請注意,這不能修改現有的表,因爲當沒有唯一標識符時,以這種方式更新記錄是不可能的。你將不得不輸出到這個新表並使用它:

;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 

與此查詢,如果TBL1包含以下輸入:

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 

會生成以下的輸出:

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」)。我認爲使用SQL是一個更簡單的解決方案,除非你有充分的理由使用LINQ。 (http://msdn.microsoft.com/en-us/library/bb399403.aspx) – mellamokb

+0

如何查看重複次數 – ashkufaraz