2016-07-02 7 views
0

Imageは、SQL

に増分更新をしたいです。これは、強調表示された行に対して値12を必要とし、他の(反復されない)レコードに対しては値1を必要とすることを意味します。

+0

別のアプローチですか? 'mysql'、' postgresql'、 'sql-server'、' oracle'、 'db2'のどれかを指定するタグを追加してください。 –

+0

すべての列が等しい場合にのみ増分が必要ですか? –

+0

はい、すべての列が等しい場合は増分してください。 –

答えて

0

テーブルスキーマ:

CREATE TABLE Items 
    (
     ItemCode VARCHAR(10), 
     Color INT, 
     Size VARCHAR(10), 
     Rack VARCHAR(10), 
     RACK1 INT, 
     NUM INT 
    ) 

データ:

INSERT INTO Items VALUES 
('LY-164', 1, 'L', 'LT', 74, NULL), 
('LY-164', 1, 'M', 'LT', 75, NULL), 
('LY-164', 1, 'XL', 'LT', 67, NULL), 
('LY-164', 1, 'XXL', 'LT', 70, NULL), 
('LY-178', 1, 'L', 'LT', 104, NULL), 
('LY-178', 1, 'L', 'LT', 109, NULL), 
('LY-178', 1, 'M', 'LT', 122, NULL), 
('LY-178', 1, 'M', 'LT', 122, NULL), 
('LY-178', 1, 'XL', 'LT', 108, NULL), 
('LY-178', 1, 'XL', 'LT', 109, NULL), 
('LY-178', 1, 'XXL', 'LT', 108, NULL) 

あなたがこれを使用することができ、あなたのテーブルの主キーを持っていない場合。ここでは、まずnull値を削除してから挿入します。

; WITH CTE AS 
(
    SELECT ItemCode, Color, Size, Rack, Rack1 
    , ROW_NUMBER() OVER (PARTITION BY ItemCode, Color, Size, Rack, Rack1 ORDER BY ItemCode, Color, Size, Rack, Rack1) AS RN 
    FROM Items 
) 
INSERT INTO Items 
SELECT * FROM CTE 

DELETE FROM Items WHERE NUM IS NULL 

SELECT * FROM Items 

これは、RDBMSはこのです(ひと味違うの更新、SQLでの黒魔術の1)

DECLARE @ItemCode VARCHAR(10) 
DECLARE @Color INT 
DECLARE @Size VARCHAR(10) 
DECLARE @Rack VARCHAR(10) 
DECLARE @RACK1 INT 
DECLARE @NUM INT = 1 

UPDATE A 
SET 
@NUM = IIF(@ItemCode IS NULL OR @ItemCode <> A.ItemCode OR @Color <> A.Color OR @Size <> A.Size OR @Rack <> A.Rack OR @RACK1 <> A.RACK1, 1, @Num + 1), 
@ItemCode = A.ItemCode, 
@Color = A.Color, 
@Size = A.Size, 
@Rack = A.Rack, 
@RACK1 = A.RACK1, 
A.Num = @NUM 
FROM Items A 

SELECT * FROM Items 

回答

LY-164 1 L LT 74 1 
LY-164 1 M LT 75 1 
LY-164 1 XL LT 67 1 
LY-164 1 XXL LT 70 1 
LY-178 1 L LT 104 1 
LY-178 1 L LT 109 1 
LY-178 1 M LT 122 1 
LY-178 1 M LT 122 2 
LY-178 1 XL LT 108 1 
LY-178 1 XL LT 109 1 
LY-178 1 XXL LT 108 1 
+0

'SQL Server 2012 + 'に特有のものは' SQL SERVER 2008'でも使えるはずです –

+0

Tanjimありがとうございました。 –

+0

乾杯。私は気まぐれに投票する – Esty