2013-12-19 2 views
1

삽입 열을 사용하여 계산 된 행을 테이블에 추가하려고합니다. 그래서 대략 내가 추가하려고 다음과 같은 분할 해요 : 내가 얻을 그래서SQL에 변수가있는 행 추가

 [RFC]  [Tons] 
[1] NAME 1  30 
[2] NAME 2  50 
[3] NAME 2  30 
[4] NAME 2  20 

을 : 당신이 볼 수 있듯이

 [RFC]  [Tons] 
[1] NAME 1  30 
[2] NAME 2  42 
[3] NAME 2  58 

, 나는 이름이 모두 추가 한 후 두 행으로 나누어 : 총 42 %, 전체 58 % 중 하나. 계산 된 변수를 추가

은 매우 간단합니다 :

먼저 나는 그런

DECLARE @TonsE int; 
SET @TonsE = CASE 
WHEN 
(SELECT SUM(mkt_impotemporal.Tons)*0.42 FROM mkt_impotemporal where RFC='EHP040219KX0' GROUP BY RFC) is null THEN 0 
ELSE 
(SELECT SUM(mkt_impotemporal.Tons)*0.42 FROM mkt_impotemporal where RFC='EHP040219KX0' GROUP BY RFC) 
END; 

을 내 변수를 선언 나는 추가 :

INSERT INTO mkt_impotemporal 
VALUES 
('EHP040219KX0', 
@TonsE) 

그러나, 지금은와 붙어있어 총 42 %의 새 행을 포함하지만 나머지 행을 원래 값의 58 % 만 반영하도록 변경할 수는 없습니다. 새 행을 삽입하기 전에 업데이트를 실행하더라도 (나는 sur가 아닙니다. 어떻게 작동하지만 변수가 다른 쿼리의 숫자를 "저장"하지 않는 것 같습니다.

어떻게하면이 아이디어를 얻을 수 있습니까? 미리 감사드립니다!

+0

어떤 데이터베이스 시스템을 사용하고 있습니까? –

+0

@AlexanderFedorenko SQL 2012. – eflores89

답변

1

가장 쉬운 방법은 두 번째 변수를 사용하고 삽입하기 전에 값을 계산하는 것입니다.

DECLARE @TonsE int; 
SET @TonsE = CASE 
WHEN 
(SELECT SUM(mkt_impotemporal.Tons)*0.42 FROM mkt_impotemporal where RFC='EHP040219KX0' GROUP BY RFC) is null THEN 0 
ELSE 
(SELECT SUM(mkt_impotemporal.Tons)*0.42 FROM mkt_impotemporal where RFC='EHP040219KX0' GROUP BY RFC) 
END; 

DECLARE @TonsE2 int; 
SET @TonsE = CASE 
WHEN 
(SELECT SUM(mkt_impotemporal.Tons)*0.58 FROM mkt_impotemporal where RFC='EHP040219KX0' GROUP BY RFC) is null THEN 0 
ELSE 
(SELECT SUM(mkt_impotemporal.Tons)*0.58 FROM mkt_impotemporal where RFC='EHP040219KX0' GROUP BY RFC) 
END; 

--DELETE FROM mkt_impotemporal WHERE RFC = 'EHP040219KX0' 

INSERT INTO mkt_impotemporal 
VALUES 
('EHP040219KX0', 
@TonsE); 

INSERT INTO mkt_impotemporal 
VALUES 
('EHP040219KX0', 
@TonsE2) 
+0

숫자를 저장하고 다시 지우고 복사하기 위해 실제로 다른 테이블을 만들었지 만 솔루션이 훨씬 우아하고 효율적입니다. 감사!! – eflores89

관련 문제