2017-10-18 136 views
0

我有一个表table1,它有一些列,必须根据某些条件计算并移动到另一个表table2中。为了符合条件,我创建了一个临时表#ttemp,并将临时表更改为创建两个新变量var1var2,以根据不同的列设置一些值,并稍后检查这些条件。如果条件通过,我做一些聚合,然后我会插入table2将有聚合列。从SQL Server 2016中的temp中将IF语句插入到表中

首先,从table1创建#temp表和变量。

SELECT * 
INTO #ttemp 
FROM table1 

alter table #ttemp add var1 int 
alter table #ttemp add var2 int 

update #ttemp set var1 = -1 

update #ttemp set var1 = 1 
where error <> 0 and var1 = -1 

update #ttemp var2 = -1 

接着,var1柱和var2列从#temp表(var1 = 0var2 = -1)值的值和计算的cus_requestcus_stay平均,并把它们在一个新的临时表#ttemp2

IF var2 = -1 and var1 = 0 
    BEGIN 
    select y.id, y.avg(cus_request) as r_avg, y.avg(cust_stay) as s_avg 
    INTO #ttemp2 
    FROM #ttemp as y 

    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 
    t.id = l.id 

END 

我的问题是,我的IF语句不能正常工作,如果我只是运行select语句和update声明它工作正常,但更新语句之后,我得到0 rows affected因为条件不符合。我正在使用update而不是insert声明。如何将记录插入table2

任何帮助将不胜感激。

+0

您的BEGIN在哪里? –

+0

你可以发布完整的查询吗?我没有真正了解你的IF如何适应。如果你想比较一个值,而不是一列。你可以通过WHERE子句来实现你在那里完成的任务。 – Leonidas199x

+0

@ Leonidas199x我正在比较那些'var1'和'var2'列的值。我是SQL Server的新手。你的意思是我可以在'where'子句中设置'var1'和'var2'的值比较吗? –

回答

1

我认为你错用了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; 
+0

我正在编辑我的问题从上面的评论过程中,但我可以用文字编辑,而不是在我的代码中,因为这是我非常多。让我试试这个。这可能是要走的路! –

+0

@i.n.n.m做了一些修改,别名需要一点关注。 – Leonidas199x

+0

是的,我的错误 - 道歉。你将#ttemp2加入到table2上? – Leonidas199x