我正面临着SSMS 2012的一个奇怪问题,正如我在下表所示:
Serial_num Item_NBR SeqNo Parent_SeqNo Depth Parent_Item_NBR
AAA 123221 1 NULL 1
AAA 112333 2 1 2
AAA 223345 3 2 2
AAA 122322 4 3 3
我在查询下运行以使用parent_item_NBR更新表:
UPDATE tbl SET PARENT_ITEM_NBR = ( SELECT top 1 a.ITEM_NUM
FROM tbl b where
a.SERIAL_NUM = b.SERIAL_NUM and a.SEQNO=b.PARENT_SEQNO and a.DEPTH=b.DEPTH-1
) FROM tbl a
但它给我以下结果:
Serial_num Item_NBR SeqNo Parent_SeqNo Depth Parent_Item_NBR
AAA 123221 1 NULL 1 123221
AAA 112333 2 1 2 112333
AAA 223345 3 2 2 223345
AAA 122322 4 3 3 NULL
相反,我需要
Serial_num Item_NBR SeqNo Parent_SeqNo Depth Parent_Item_NBR
AAA 123221 1 NULL 1 123221
AAA 112333 2 1 2 123221
AAA 223345 3 2 2 112333
AAA 122322 4 3 3 223345
请建议是否有任何解决方法可以使用自联接来更新表格。 感谢。
答案 0 :(得分:1)
;WITH CTE AS
(
SELECT A.PARENT_ITEM_NBR
,C.TOP_ITEM_NUM
FROM tbl A
CROSS APPLY ( SELECT top 1 a.ITEM_NUM
FROM tbl b
where a.SERIAL_NUM = b.SERIAL_NUM
and a.SEQNO = b.PARENT_SEQNO
and a.DEPTH = b.DEPTH-1
) C(TOP_ITEM_NUM)
)
UPDATE CTE
SET PARENT_ITEM_NBR = TOP_ITEM_NUM
答案 1 :(得分:0)
您可以在更新声明中执行self join
不需要深度条件,深度条件,第3行父项nbr将是第1行 2-1 = 1
试试这个。
update p
set Parent_Item_NBR = p1.item_nbr
from project p
join project p1
on p.serial_num = p1.serial_num
and isnull(p.parent_seqno,1) = p1.seqno