我有一个表SL_PROD,其中包含以下列:NUMBER,DEPTCODE,DISP_SEQ和SL_PROD_ID。
SL_PROD_ID是一个标识列,随着每一行逐渐增加。
我需要编写一个查询,用于更新DISP_SEQ列,其中序列号(1-X)表示DEPTCODE为“725”的行。我尝试了几件没有运气的事情,有什么想法吗?
答案 0 :(得分:1)
试试这个:
公用表表达式可用于更新。如果您想使用窗口函数的值(使用OVER
)作为更新值,这非常有用。
NUMBER
,但您可能需要其他排序列(可能是您的IDENTITY
列)CREATE TABLE #SL_PROD(NUMBER INT,DEPT_CODE INT,DISP_SEQ INT,SL_PROD_ID INT IDENTITY);
INSERT INTO #SL_PROD(NUMBER,DEPT_CODE,DISP_SEQ) VALUES
(1,123,0)
,(2,725,0)
,(3,725,0)
,(4,123,0)
,(5,725,0);
WITH UpdateableCTE AS
(
SELECT ROW_NUMBER() OVER(ORDER BY NUMBER) AS NewDispSeq
,DISP_SEQ
FROM #SL_PROD
WHERE DEPT_CODE=725
)
UPDATE UpdateableCTE SET DISP_SEQ=NewDispSeq;
SELECT * FROM #SL_PROD;
GO
--Clean up
--DROP TABLE #SL_PROD;
结果(用725看行)
1 123 0 1
2 725 1 2
3 725 2 3
4 123 0 4
5 725 3 5