2011-10-04 2 views
0

나는 다음과 같은 데이터가 :이 데이터를 다른 테이블이T-SQL 루핑 절차

ID  Date     interval interval_date   tot_activity non-activity 
22190 2011-09-27 00:00:00  1000 2011-09-27 10:00:00.000  265   15 

을 :

Date      ID    Start    END    sched_non_activity  non_activity 
10/3/2011 12:00:00 AM HBLV-22267 10/3/2011 2:02:00 PM 10/3/2011 2:11:00 PM 540   

이제 두 번째 테이블의 non_activity 필드에, 나는이 싶습니다 첫 번째 표의 값이됩니다. 그러나, 나는 tot_activity - non_activity를 캡처 할 필요가 있는데, 첫 번째 테이블에서 15 분 간격으로 간격을두고 두 번째 테이블의 시작과 끝과 같은 시간 프레임에 속합니다.

변수를 설정하고 각 행에 대해 간격으로 시작 시간을 확인하는 루프를 설정해 보았습니다. 그러나 변수가 점점 커지고있는 오류가 계속 발생하면서 하나의 레코드 만 사용하여 변수를 반환하는 방법을 모릅니다. 많은 결과.

나는 모든 곳에서 자습서를 찾아 보았으나 나를 도와 줄 수있는 것을 찾을 수 없었다. 누구나 공유 할 수있는 루핑에 대한 지침이나 자습서가 있습니까?

+0

이 질문에 대해 자세히 설명해 주시겠습니까? "나는 포획해야한다"는 것은 무엇을 의미합니까? 두 번째 테이블의 non_activity가 첫 번째 테이블의 비 활동 필드의 값을 가져 가고 싶다고 생각하지만 다른 무엇을 캡처해야합니까? –

+0

첫 번째 표는 15 분 간격입니다. 따라서 15 : 00,15 : 15,15 : 30 등 두 번째 표에는 정상 시작 시간과 종료 시간이 hh : mm : ss로 표시됩니다. 두 번째 테이블의 sched_non_activity를 첫 번째 테이블과 교차 점검해야합니다. tot_activity - non_activity 두 번째 테이블의 간격과 시간이 일치해야합니다. 그래서 두 번째 테이블의 시작이 15:55라면 15:45의 table1 간격을 포함시켜야합니다. 희망이 충분히 분명하다 :) – Jessica

+0

나는 당신이 시도한 것을 게시해야한다고 생각한다. 귀하의 시도가 실수로 끝났음에도 불구하고 귀하의 의도를 더 잘 이해하는 데 도움이 될 수 있습니다. 도움이 될 수있는 또 다른 한 가지는 샘플에서 생성 된 예상 결과와 함께 데이터 샘플입니다. 귀하의 문제는 까다로운 것으로 보이며, 언어 적 설명만으로는 이해가 충분하지 않은 것으로 보입니다. –

답변

2

어떻게하면 간격 종료 날짜를 생성해야합니까? 15 분 간격으로 기록하는 첫 번째 테이블에 항상 레코드가 있다고 가정합니다. 이 경우 예는 다음과 같습니다.

;WITH Intervals 
AS 
(SELECT 
    Interval_date 
    ,DATEADD(ms,840997,Interval_date) AS interval_end 
    ,nonactivity 
FROM A) 

--Select query for Validation 
--SELECT 
-- b.[Date] 
-- ,b.ID 
-- ,b.Start 
-- ,b.sched_non_activity 
-- ,i.nonactivity 
--FROM B 
--JOIN Intervals AS i 
--ON b.Start >= i.Interval_date 
--AND b.[END] <= i.interval_end 

UPDATE B 
    SET non_activity = i.nonactivity 
FROM B 
JOIN Intervals AS i 
ON b.Start >= i.Interval_date 
AND b.[END] <= i.interval_end 

분명히 정확한 상황에 따라 조정해야 할 수도 있습니다.