使用序列号更新SQL列

时间:2016-06-02 22:17:16

标签: sql sql-server sql-server-2008

我有一个表SL_PROD,其中包含以下列:NUMBER,DEPTCODE,DISP_SEQ和SL_PROD_ID。

SL_PROD_ID是一个标识列,随着每一行逐渐增加。

我需要编写一个查询,用于更新DISP_SEQ列,其中序列号(1-X)表示DEPTCODE为“725”的行。我尝试了几件没有运气的事情,有什么想法吗?

1 个答案:

答案 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