2017-03-15 15 views
-3

投影されたストックを更新するために、テーブルのカーソルまたはループを使用せずにSQL Server Updateクエリが必要です。 projectedStock < ReorderPoint次いで追加SQL Serverの更新クエリが必要

OrderQuantity例えば

  • ReorderPoint 1600
  • OrderQuantity 1200

サンプルデータ:

Date   ProjectedStock 
---------------------------- 
15/03/2017  125 
16/03/2017  -172 
17/03/2017  -172 
18/03/2017  -796 
19/03/2017  -796 
20/03/2017  -1420 
21/03/2017  -1717 
必要に応じての

結果:

Date ProjectedStock 
15/03/2017 1325 
16/03/2017 2228 
17/03/2017 2228 
18/03/2017 1604 
19/03/2017 1604 
20/03/2017 2180 
21/03/2017 1883 

私が試したコードは次のとおりです。

update sku 
set projectedStock = case 
         when projectedStock < ReorderPoint 
          then projectedStock + OrderQuantity 
        end 

しかし、すべての行がprojectedStockを計算間違っを与えると同時に希望に更新されます。

+2

を行います。あなたは少なくとも試みを示す必要があります。 – Lexi

+0

申し訳ありませんLexi。私はそのクエリを試みましたが、問題は、すべての行が同時に誤って計算されたprojectionStockを与えることを願って更新されます。 更新SKU セットprojectedStock =ケースprojectedStock

+1

は、私はあなたのためのあなたの質問にそれを追加します。 –

答えて

0

ProjectedStockProjectedStock < ReorderPointに更新する場合のみ、ここにクエリがあるとします。

UPDATE p 
SET ProjectedStock = 
    CASE WHEN ProjectedStock < ReorderPoint 
     THEN ProjectedStock + OrderQuantity 
    ELSE ProjectedStock END 
FROM <YourStockTable> 

質問をする前にいくつか作業してください。あなたが試したことと働いていないことを示してください。

0

これはこれは、コードの書き込みサービスではありませんトリック

DECLARE @T TABLE(StockDate VARCHAR(20), Stock INT) 
INSERT INTO @T 
VALUES ('15/03/2017', 125), 
    ('16/03/2017', -172), 
    ('17/03/2017', -172), 
    ('18/03/2017', -796), 
    ('19/03/2017', -796), 
    ('20/03/2017', -1420), 
    ('21/03/2017', -1717), 
    ('22/03/2017', 2001) 

UPDATE @T 
SET Stock = CASE WHEN Stock < 1600 THEN (((1600 - Stock)/1200) + 1) * 1200 + Stock ELSE Stock End 

結果

+-----------+------+ 
|StockDate |Stock | 
+-----------+------+ 
|15/03/2017 |2525 | 
|16/03/2017 |2228 | 
|17/03/2017 |2228 | 
|18/03/2017 |1604 | 
|19/03/2017 |1604 | 
|20/03/2017 |2180 | 
|21/03/2017 |1883 | 
|22/03/2017 |2001 | 
+-----------+------+ 
関連する問題