2017-10-05 54 views
0

我正在查看錶中的行數(它與特定的產品ID &類型匹配)更新item number列,但我想按照「Seqnumber '欄中,然後項目編號列從1開始,並按順序將每行計數爲1.在更新SQL中使用ORDER BY命令

使用下面的代碼,我可以選擇產品編號和類型,我想要的和更新項目編號列順序增加值,但我不知道如何訂購所需的行?

DECLARE @id nvarchar(6) 
SET @id = 0 

UPDATE Table1 
SET @id = Table1.ItemNumber = @id + 1 
WHERE Product = '5486' AND Table1.Type = 'C' 

我知道UPDATE命令中沒有使用它作爲一個子查詢,你不能使用ORDER BY命令。但我不知道我應該如何在上面的代碼中包含這個?

我想我需要合併下面的代碼,但不知道SELECT聲明應該是什麼,當我嘗試我不能得到它的工作?

DECALRE @id nvarchar(6) 
SET @id = 0 

UPDATE Table1 
SET @id = TABLE1.ItemNumber = @id + 1 
FROM (SELECT TOP (??)* FROM Table1 
     WHERE Product = '5486' AND Table1.Type ='C' 
     ORDER BY Table1.SeqNumber ASC 
+0

'DECLARE @Id爲nvarchar(6) SET @id = 0 UPDATE Table1 ....'像這樣使用是無效的MySQL代碼在我看來你正在使用sql server作爲數據庫。 TOP也是無效的MySQL代碼 –

回答

0

這應該工作:

SET @id = 0; 

UPDATE Table1 
    SET @id = Table1.ItemNumber = (@id := @id + 1) 
    WHERE Product = 5486 and Table1.Type = 'C' 
    ORDER BY Table1.seqnumber; 

你不能用一個JOIN使用ORDER BY,所以你需要update前初始化變量。

1

您應該能夠建立一個CTE從表所需的值,只是更新CTE

declare @Table1 table (Product varchar(4), [Type] varchar(1), SeqNumber int, ItemNumber int) 
INSERT INTO @Table1 VALUES 
('5486', 'C', 3, 0), 
('5486', 'C', 2, 0); 



with cte as (
    select *, 
      ROW_NUMBER() OVER (ORDER BY SeqNumber) rn 
    from @Table1 
    where Product = '5486' and Type ='C' 
) 
Update cte 
set ItemNumber = rn 
-1
UPDATE sales_data 
SET ID = ID + 1 
ORDER BY ID DESC; 
+0

語法無效......如果您只是將1添加到當前值,那麼順序也是無關緊要的。 –