Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQL Server 2016中的temp中的IF语句将记录插入表中_Sql_Sql Server_If Statement_Aggregation_Insert Update - Fatal编程技术网

使用SQL Server 2016中的temp中的IF语句将记录插入表中

使用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行受影响的行。

我有一个表table1,其中有一些列,必须根据一些条件计算并移动到另一个表table2中。为了满足这些条件,我创建了一个临时表ttemp,并通过创建两个新变量var1和var2将临时表更改为,以根据不同的列设置一些值,然后检查这些条件。如果条件通过,我将进行一些聚合,然后我将插入到表2中,该表将包含聚合列

首先,从表1创建临时表和变量

我的问题是,IF语句不起作用,如果我只运行select语句和update语句,它就可以正常工作,但在update语句之后,由于条件不满足,我得到了0行受影响的行。我正在使用update而不是insert语句。如何将记录插入表2中


任何帮助都将不胜感激

我认为你误用了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;