使用SQL Server 2016中的temp中的IF语句将记录插入表中
我有一个表table1,其中有一些列,必须根据一些条件计算并移动到另一个表table2中。为了满足这些条件,我创建了一个临时表ttemp,并通过创建两个新变量var1和var2将临时表更改为,以根据不同的列设置一些值,然后检查这些条件。如果条件通过,我将进行一些聚合,然后我将插入到表2中,该表将包含聚合列 首先,从表1创建临时表和变量 我的问题是,IF语句不起作用,如果我只运行select语句和update语句,它就可以正常工作,但在update语句之后,由于条件不满足,我得到了0行受影响的行。我正在使用update而不是insert语句。如何将记录插入表2中使用SQL Server 2016中的temp中的IF语句将记录插入表中,sql,sql-server,if-statement,aggregation,insert-update,Sql,Sql Server,If Statement,Aggregation,Insert Update,我有一个表table1,其中有一些列,必须根据一些条件计算并移动到另一个表table2中。为了满足这些条件,我创建了一个临时表ttemp,并通过创建两个新变量var1和var2将临时表更改为,以根据不同的列设置一些值,然后检查这些条件。如果条件通过,我将进行一些聚合,然后我将插入到表2中,该表将包含聚合列 首先,从表1创建临时表和变量 我的问题是,IF语句不起作用,如果我只运行select语句和update语句,它就可以正常工作,但在update语句之后,由于条件不满足,我得到了0行受影响的行。
任何帮助都将不胜感激 我认为你误用了IF 如果要比较两个值,则不要查看两列并找出满足条件的数据 我认为你可以通过WHERE条款实现你的目标:
SELECT avg(y.cus_request) AS r_avg, avg(y.cust_stay) AS s_avg
INTO #ttemp2 as t2
FROM #ttemp as y
WHERE y.var2 = -1 AND y.var1 = 0
UPDATE l
SET l.cus_request_avg = t.r_avg,
l.cust_stay_avg = t.s_avg
FROM table2 as l
inner join #ttemp2 as t ON t.id = l.id
要回答评论中的问题
要插入到表中,它是:
INSERT INTO table2
(
cus_request_avg ,
cust_stay_avg
)
SELECT t.r_avg ,
t.s_avg
FROM #ttemp2 AS t;
仅在表2中不存在记录的情况下插入:
INSERT INTO table2
(
cus_request_avg ,
cust_stay_avg
)
SELECT t.r_avg ,
t.s_avg
FROM #ttemp2 AS t
LEFT JOIN table2 AS l ON t.id = l.id
WHERE l.id IS NULL;
你从哪里开始?你能发布完整的查询吗?我真的不明白你的IF是怎么适应的。如果要比较的是值,而不是列,则使用。您在那里所做的可以通过我想象的WHERE子句来实现。@Leonidas199x我正在比较那些var1和var2列的值。我是SQL Server的新手。你的意思是我可以在where子句中设置var1和var2的值比较吗?你的伪代码太模糊了,很难弄清楚你想在这里实现什么。@SeanLange好的,让我来编辑这篇文章。是否可以执行IF语句并插入记录?对不起,我正在尝试理解SQL的IF-ELSE逻辑!我正在编辑上面评论中的问题,但我可以用文字编辑,而不是用代码编辑。让我试试这个。这也许是最好的办法@i、 n.n.m做了一些修改,别名需要注意一下。是的,我的错误-抱歉。您将ttemp2加入表2中的内容是什么?where子句起作用,但是,快速问题如果我必须在计算平均值时立即插入实时,我如何在表2中使用insert?而不是使用更新?假设我在表2中没有任何数据
INSERT INTO table2
(
cus_request_avg ,
cust_stay_avg
)
SELECT t.r_avg ,
t.s_avg
FROM #ttemp2 AS t;
INSERT INTO table2
(
cus_request_avg ,
cust_stay_avg
)
SELECT t.r_avg ,
t.s_avg
FROM #ttemp2 AS t
LEFT JOIN table2 AS l ON t.id = l.id
WHERE l.id IS NULL;