2017-11-30 1 views
1

특정 필드의 데이터를 저장하는 선택 쿼리에 대한 동적 변수를 만들어야하는 경우가 있습니다. Column0='H' 값이 변경 될 때까지 Column0='D' (표 여러 H를 가질 때 다음 시나리오SQL Server에서 테이블의 필드를로드하는 동적 변수를 만드는 방법

테이블 '고객의 데이터보다 갖는다

Column0 Column1 Column2  Column3  Column4 Column5 
-------------------------------------------------------- 
H  123X    11/27/2017 C  10.23 
D  123X 78462F103 11/28/2017 A  112.35 
D  123X 55024U109 11/28/2017 A  25.30 
H  456X    11/27/2017 B  5263.44 
D  456X 78462F103 11/28/2017 A  23.00 
D  456X 55024U109 11/28/2017 A  12123.00 
D  456X 78462F103 11/28/2017 A  56.08 
D  456X 55024U109 11/28/2017 C  45.07 

이제 Column0='H'Sum(column5)를 사용할 때 변수를 생성하고 Column5에로드해야 값).

예 :Column0 = 'H'일 때 이라고 말하면 변수를 계산해야합니다. Column0 = 'H'이면 '5.36'인 Variable = Sum (Column5)입니다. 이제 Coulmn1 = 'D'이면 Column5의 값은 5.63으로로드됩니다. 새 Column0 = 'H'일 때 변수 값이 '6.33'으로 변경되고 업데이트 된 값이 'D'레코드로로드됩니다.

이 문제에 대한 제안이 있으십니까?

+0

샘플 데이터를 게시 해 주셔서 감사합니다. 도움이됩니다. 그러나이 새로운 칼럼에서 원하는 것이 무엇인지 분명하지 않습니다. 샘플을 통해 출력물을 어떻게해야합니까? –

+0

"때까지"? 어떤 주문을 기반으로합니까? 원하는 결과는 명확히하는 데 도움이됩니다. – JNevill

+0

Column0 = 'H'라고 말하면 변수를 계산해야합니다 Column0 = 'H'이면 변수 = Sum (Column5)은 '5.36'입니다. 이제 Coulmn1 = 'D'이면 Column5의 값은 5.63으로로드됩니다. 새 Column0 = 'H'일 때 변수 값이 '6.33'으로 변경되고 업데이트 된 값이 'D'레코드로로드됩니다. –

답변

0

내가 맞다고 가정하면 Column0 = H 일 때 각 Column1의 모든 행의 합계를 Column5의 새 값으로 지정하면됩니다.

공지 사항 테이블에 샘플 데이터를 만들어야 아무 것도 할 수 없었습니다.

declare @Something table 
(
    Column0 char(1) 
    , Column1 char(4) 
    , Column2 varchar(20) 
    , Column3 date 
    , Column4 char(1) 
    , Column5 decimal (9,2) 
) 

insert @Something values 
('H', '123X', '', '11/27/2017', 'C', 10.23) 
, ('D', '123X', '78462F103', '11/28/2017', 'A', 112.35) 
, ('D', '123X', '55024U109', '11/28/2017', 'A', 25.30) 
, ('H', '456X', '', '11/27/2017', 'B', 5263.44) 
, ('D', '456X', '78462F103', '11/28/2017', 'A', 23.00) 
, ('D', '456X', '55024U109', '11/28/2017', 'A', 12123.00) 
, ('D', '456X', '78462F103', '11/28/2017', 'A', 56.08) 
, ('D', '456X', '55024U109', '11/28/2017', 'C', 45.07) 
; 

with SummaryData as 
(
    select * 
     , NewCol5 = case when Column0 = 'H' then sum(Column5) over(partition by Column1) else Column5 end 
    from @Something 
) 

update SummaryData 
set Column5 = NewCol5 

select * 
from @Something 

나는이 디자인에서 빨리 벗어나려는 마음이 강하게 강하게 나타납니다. 그것은 오류로 가득 차 있습니다. 그리고 더 나쁜 것은 판매 정보처럼 보입니다. 이 디자인을 사용하면 SalesTax, Shipping, discounts 등을 추적 할 수 없습니다. 주문에 대해 추적하려는 모든 종류의 것들을 추적 할 수 있습니다.

+0

원본 파일이 플랫 파일이라는 인상하에있었습니다. 따라서 내 솔루션 – KeithL

0

원본이 플랫 파일이고 SSIS 솔루션을 제공하고 있다는 인상하에있었습니다.

read data -> Conditional Split ("H" and "D") 

Dpath 
Multicast -> Write out detail records 
    -> Aggregate on Col1 --> Merge Join to H path 

H path: 
Merge Join on Col1 to Aggregated Data 

Finally either AddH Col5 to Aggregate or replace col 5 with aggregate (it's not clear in question.) 

Write out your header records. 
관련 문제