INSERT ON DUPLICATE KEY:一起添加值

时间:2017-12-14 17:12:41

标签: tsql insert sql-update sql-server-2014 on-duplicate-key

我需要更改包含日期金额的SQL表的日期列,例如2017010120170102。但是,新日期20170102可能已经存在。这会导致重复键错误,因为日期列是唯一索引的一部分。

我的第一个想法是使用INSERT ON DUPLICATE KEY:

INSERT INTO table (Date, Amount)
SELECT '20170102', Amount
FROM table
WHERE Date = '20170101'
ON DUPLICATE KEY UPDATE Amount = OldAmount + NewAmount

部分Amount = OldAmount + NewAmount显然不能正常工作。但是我该如何解决我的问题?

2 个答案:

答案 0 :(得分:0)

这是你的答案:假设旧表TABLE1(DATE1 DATE PRIMARY KEY,AMOUNT INT);

  1. 将新列Date2添加为DATE:

    ALTER TABLE TABLE1 ADD COLUMN DATE2 DATE;

  2. 按旧日期生成所有DATE2;

    UPDATE TABLE1设置DATE2 = DATE1; - 旧栏DATE1或DATE

  3. 更新DATE2哪个记录要更新DATE

    UPDATE TABLE1 SET DATE2 ='20170101'其中DATE1 ='20170102'; - 假设20170101已经存在

  4. 获取金额增加的记录

    SELECT DATE2,TABLE1组的sum(AMOUNT)乘以1; - 这将显示所有带和的记录

  5. 您可以创建新表TABLE2并插入这些记录:

    CREATE TABLE TABLE2(DATE1 DATE PRIMARY KEY,AMOUNT int); INSERT INTO TABLE2 SELECT DATE2,SUM(AMOUNT)FROM TABEL1 GROUP BY 1;

答案 1 :(得分:0)

If you're using SQL server, try a merge statement.

Just to clarify - Do you need to change the dates of records in the table or just add new records?

//