2017-10-18 3 views
0

일부 조건이있는 테이블 table2으로 계산하고 이동해야하는 일부 열이있는 table1 테이블이 있습니다. 조건을 충족시키기 위해 임시 테이블 #ttemp을 작성하고 두 개의 새로운 변수 var1var2을 작성하여 임시 테이블을 변경하여 다른 컬럼을 기반으로 일부 값을 설정 한 다음 나중에 해당 조건을 점검합니다. 조건이 통과되면 일부 집계를 수행 한 다음 나중에 집계 된 열을 포함하는 table2에 삽입합니다.SQL Server의 temp에서 IF 문을 사용하여 레코드를 테이블에 삽입하십시오. 2016

우선 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 열과 #temp 테이블 (var1 = 0var2 = -1)로부터 열 var2 '값 값 cus_request, cus_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을 얻을합니다. insert 대신 update을 사용하고 있습니다. 레코드를 table2에 어떻게 삽입 할 수 있습니까?

도움을 주시면 감사하겠습니다.

+0

BEGIN은 어디 있습니까? –

+0

전체 검색어를 게시 할 수 있습니까? 나는 당신의 IF가 맞는 방법을 실제로 얻지 못하고 있습니다. IF를 사용하면 값이 아닌 컬럼을 비교하고자합니다. 당신이 거기에서 한 일은 내가 상상할 수있는 WHERE 절에 의해 달성 될 수 있습니다. – Leonidas199x

+0

@ Leonidas199x 'var1' 및'var2' 열의 값을 비교하고 있습니다. SQL Server의 초보자입니다. 'where' 절에서'var1'과'var2'의 값 비교를 설정할 수 있다는 것을 의미합니까? –

답변

1

IF를 잘못 사용한다고 생각합니다.

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 
LEFT JOIN table2  AS l ON t.id = l.id 
WHERE  l.id IS NULL; 
: 레코드가 표 2에 존재하지 않는 경우에만

INSERT INTO table2 
     (
      cus_request_avg , 
      cust_stay_avg 
     ) 
SELECT  t.r_avg   , 
      t.s_avg 
FROM  #ttemp2  AS t; 

삽입하려면

+0

위의 의견에서 제 질문을 편집하는 과정에 있었지만 단어로 편집 할 수있었습니다. 코드에서와 같이 편집 할 수있었습니다. 내가 이것을 시도하자. 이것은 갈 길이 될 것입니다! –

+0

@ i.n.n.m은 몇 가지 수정안을 만들었으며, 앨리어스는 약간의주의가 필요했습니다. – Leonidas199x

+0

예, 제 잘못입니다. 사과드립니다. #ttemp2를 table2에 가입시키는 이유는 무엇입니까? – Leonidas199x

관련 문제