2010-12-13 40 views
0

在SQL Server 2008中,我有table1,並且希望如第二個表所示更新表。 即Rn(2)的更新值1 =來自上述記錄的Rn(1)的值2。序列由Rn決定。 在這方面的任何幫助將不勝感激。來自其他行號的T-SQL更新記錄

alt text

非常感謝。

Create table Table1(ID int, value1 int, value2 int, Item varchar(10),Rn int) 

insert into Table1(ID,Value2,Item,Rn) values('1','33242','Orange','1') 
insert into Table1(ID,Value2,Item,Rn) values('2','67665','Orange','2') 
insert into Table1(ID,Value2,Item,Rn) values('3','78765','Orange','3') 
insert into Table1(ID,Value2,Item,Rn) values('4','576','Orange','4') 
insert into Table1(ID,Value2,Item,Rn) values('5','906658','Orange','5') 
insert into Table1(ID,Value2,Item,Rn) values('6','54435','Orange','6') 
insert into Table1(ID,Value2,Item,Rn) values('7','7464','Mango','1') 
insert into Table1(ID,Value2,Item,Rn) values('8','9876','Mango','2') 
insert into Table1(ID,Value2,Item,Rn) values('9','2433','Mango','3') 
insert into Table1(ID,Value2,Item,Rn) values('10','5654','Mango','4') 
insert into Table1(ID,Value2,Item,Rn) values('11','13213','Mango','5') 
insert into Table1(ID,Value2,Item,Rn) values('12','9867867','Mango','6') 
insert into Table1(ID,Value2,Item,Rn) values('13','5644355','Mango','7') 
insert into Table1(ID,Value2,Item,Rn) values('14','6534','Apple','1') 
insert into Table1(ID,Value2,Item,Rn) values('15','343','Apple','2') 
insert into Table1(ID,Value2,Item,Rn) values('16','423','Apple','3') 
insert into Table1(ID,Value2,Item,Rn) values('17','7666','Apple','4') 
+0

您是否在任何地方執行任何關係?我看到一個隱含的父母子女關係,但實際上沒有定義... – 2010-12-13 20:49:43

回答

2

這設置Value1每個「塊」的第一行爲空。您可以使用ISNULL覆蓋此值並將其設置爲0,或者其他任何默認值都可能是合適的。

;WITH cte (Id, Value1, Value2, Item, Rn, RnPlus1) 
as (select Id, Value1, Value2, Item, Rn, row_number() over (partition by Item order by Rn) + 1 RnPlus1 
from Table1) 
UPDATE Table1 
set Value1 = cte.Value2 
from Table1 t1 
    inner join cte 
    on cte.Item = t1.Item 
    and cte.RnPlus1 = t1.Rn 
+0

謝謝先生!我感謝您的幫助。 – user219628 2010-12-13 21:33:25

0

可能很困難,因爲您尚未定義任何父母子女關係。你可以在插入時做(可能定義關係,然後......)?

insert into Table1(ID,Value1,Value2,Item,Rn) values('1','','33242','Orange','1') 
insert into Table1(ID,Value1,Value2,Item,Rn) values('2','33242','67665','Orange','2') 
insert into Table1(ID,Value1,Value2,Item,Rn) values('3','67665','78765','Orange','3') 
insert into Table1(ID,Value1,Value2,Item,Rn) values('4','78765','576','Orange','4') 

等等...

+0

謝謝。從上面的記錄更新Rn(2)的更新值1 = Rn(1)的值2。序列由Rn決定。 – user219628 2010-12-13 21:01:55

0

我一直認爲這是流浪漢的權利疼痛。但我會建議一個遊標。像這樣的東西; (這僅僅是一個框架。它不工作!但是,你應該能夠看到的原則)

DECLARE @ field1的整數 DECLARE @ fiedl2整數 DECLARE @NewValue整數

SET @NewValue = 0

DECLARE TAB1 CURSOR FOR SELECT * FROM表1

NEXT FROM TAB1 提取到@字段1,@場2

WHILE @@ FETCH_STATUS = 0 BEGIN

IF @NewValue <> 0 
    UPDATE Table1 SET field1 = @NewValue 

FETCH NEXT FROM Tab1 
INTO @field1, @field2 

SET @NewValue = @field2 

END

CLOSE TAB1 DEALLOCATE TAB1

0

了我的頭,像的頂部:

更新表1 T1設置T1。 value1 =(從table1 t2中選擇t2.value2,其中t2.id = t1.id + 1)其中t1.rn!= 1