我正在尝试在 SQL Server 中编写一个执行以下操作的查询:对一个表执行数据聚合查询,然后将结果传递给另一个表。
如果该日期的行已经存在,则更新该列,否则插入新行
INSERT INTO T2 (timevalue, colValue)
SELECT
Time_Stamp_Hour = DATEADD(hh, DATEPART(hh, E3TimeStamp), CAST(CAST(E3TimeStamp AS date) AS datetime)),
AvgValue = AVG(MyValue)
FROM
(SELECT T1.*
FROM T1
WHERE (Quality) >= 0) t
GROUP BY
DATEADD(hh, DATEPART(hh, E3TimeStamp), CAST(CAST(E3TimeStamp AS date) AS datetime))
ON DUPLICATE KEY UPDATE --TimeStamp matched
colValue = t.AvgValue
但是,我从这个查询中得到一个语法错误:
<块引用>关键字“ON”的语法不正确
我不知道怎么回事。有什么想法吗?
非常感谢!
答案 0 :(得分:1)
sql server 不支持 upsert 语句,您可以使用 merge
:
merge T2 as target
using (
select Time_Stamp_Hour=dateadd(hh,datepart(hh,E3TimeStamp), cast(CAST(E3TimeStamp as date) as datetime))
, AvgValue=AVG(MyValue)
from (select T1.*
from T1
where (Quality) >= 0)t
group by dateadd(hh,datepart(hh,E3TimeStamp), cast(CAST(E3TimeStamp as date) as datetime))
) as source
on target.timevalue = source.Time_Stamp_Hour
when not matched
insert (Time_Stamp_Hour,AvgValue)
when matched
update set target.colValue= source.AvgValue