2017-10-05 6 views
0

item numberの列を特定のプロダクトID &タイプに一致するテーブルの行から更新したいと考えていますが、「Seqnumber項目番号の列は1から始まり、1行ずつ順番に数えます。UPDATEでORDER BYコマンドを使用するSQL

以下のコードを使用して、製品IDとタイプを選択してアイテム番号列を順次増やしながら更新できました。しかし、私はどのように必要な行を注文することができないのですか?

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

= 0 UPDATE @id '@id nvarchar型を宣言(6) SETを更新する必要がありますテーブル1 .... 'このように使用されている無効な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; 

をあなたはJOINORDER 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を追加するだけであれば、その順序も無関係です。 –

関連する問題