2013-10-27 35 views
0

我有一個問題,即我的當前腳本正確地分配給每個參考實體。SQL Server:將varchar生成爲具有一些條件的數字

update dbo.expozitura 
set reference_subjektu = replicate('0', 8-len(rn))+b.rn 
from dbo.expozitura a 
INNER JOIN 
(
    select dbo.expozitura.cislo_subjektu , cast(ROW_NUMBER() OVER (order by cislo_subjektu) as varchar) as rn 
    from dbo.expozitura 
)b ON b.cislo_subjektu = a.cislo_subjektu 

select * from dbo.expozitura; 

OUTPUT:(步驟1)

cislo_subjektu reference_subjektu organizace adresa_ulice psc   ico 
1    00000001     2        7774588 
2    00000002     0  Linkoln 50    7774588 
3    00000003     0      403 31  729544866 
4    00000004     0        8544569 
5    00000005     0  Linkoln 66  578 99  8542155 
6    00000006     0      558 41  8542155 

第2步:

我需要一個更聲明,如果有任何 「dbo.expozitura」 用相同的 「ICO」 。因此,根據具體的「ico」,將他的第一個參考文獻分配給所有相同的參考文獻。這樣會更多。

OUTPUT:

如果一切是正確的,這應該是最後的結果。

cislo_subjektu reference_subjektu organizace adresa_ulice psc   ico 
1    00000001     2        7774588 
2    00000001     0  Linkoln 50    7774588 
3    00000003     0      403 31  729544866 
4    00000004     0        8544569 
5    00000005     0  Linkoln 66  578 99  8542155 
6    00000005     0      558 41  8542155 

請幫我解決我的問題。

回答

0

您可以使用一個可更新公用表表達式來實現這一目標:

With x as (
    Select 
     reference_subjektu, 
     min(reference_subjektu) over (partition by ico) nval 
    from 
     expozitura 
) update 
    x 
set 
    reference_subjektu = nval 
where 
    reference_subjektu != nval; 

Example SQLFiddle

+0

你有任何的下一個想法如何解決呢? –

+0

Msg 2627,Level 14,State 1,Line 1 違反唯一鍵約束'UQ__expozitu__780A73EA03B2F7CC'。不能在對象'dbo.expozitura'中插入重複鍵。重複鍵值是(00000001)。 該聲明已被終止。 –

+0

@RadekTarant如果你的表在reference_subjektu列上有一個唯一的約束,那麼你的問題是不可能的。 – Laurence

相關問題