2017-12-08 13 views
0

그리고 SQL. 내 상황. 테이블에 삽입해야합니다. 나는 조건이있다. 일부 인서트는 요일과 달의 요율이 동일하면 수행 할 수 있습니다. 예 : 카테고리 2 요금 = 1 개월. 그래서 4 월에 한 번만 삽입해야합니다. 하지만 제 경우에는 예상 한 1 개의 레코드를 삽입하고 5 번 더 삽입합니다.주기에 레코드 삽입 MS SQL

SET @Rate_Init = 1 
DECLARE @Min_Amount INT = (SELECT T.AccountMin FROM Transactions T 
FULL JOIN Marathon.dbo.Categories C ON C.CategoryName = 
T.OperationName WHERE C.CategoryID = @External_Loop_Counter) 
DECLARE @Max_Amount INT = (SELECT T.AccountMax FROM Transactions T 
FULL JOIN Marathon.dbo.Categories C ON C.CategoryName = 
T.OperationName WHERE C.CategoryID = @External_Loop_Counter) 
DECLARE @Check_Period NVARCHAR(10) = (SELECT Period FROM (SELECT * 
FROM Transactions T FULL JOIN Marathon.dbo.Categories C ON 
C.CategoryName = T.OperationName) X WHERE CategoryID = 
@External_Loop_Counter)    
DECLARE @Frequency INT = (SELECT Rate FROM (SELECT * FROM 
Transactions T FULL JOIN Marathon.dbo.Categories C ON C.CategoryName 
= T.OperationName) X WHERE CategoryID = @External_Loop_Counter) 
WHILE @Total_Dates >= @Internal_Loop_Counter 
        BEGIN 

        IF(@Frequency <= @Rate_Init) 
         BEGIN 
         INSERT INTO Transactions (TransactionDate, TransactionAmount, CategoryID) 
         VALUES((DATEADD(DAY, @Internal_Loop_Counter, @Start_DT)), (@Max_Amount - CAST(((@Max_Amount - @Min_Amount)) AS FLOAT)*RAND()), 
         (SELECT CategoryID FROM (SELECT * FROM Transactions T FULL JOIN Marathon.dbo.Categories C ON C.CategoryName = T.OperationName) X WHERE CategoryID = @External_Loop_Counter)) 
         END 

         SET @Rate_Init = @Rate_Init + 1 
        SET @Jump_Ratio = (
        CASE 
        WHEN @Check_Period = 'Week' THEN (@Internal_Loop_Counter + CAST(CAST(@Week_T AS FLOAT)*RAND() AS INT)) 
        WHEN @Check_Period = 'Month' THEN (@Internal_Loop_Counter + CAST(CAST(@Month_T AS FLOAT)*RAND() AS INT)) 
        WHEN @Check_Period = 'Year' THEN (@Internal_Loop_Counter + CAST(CAST(@Year_T AS FLOAT)*RAND() AS INT)) 
        END 
        ) 

        SET @Internal_Loop_Counter = @Jump_Ratio + 1 
        END 

기대 2012-03-28 0시 0분 0초 140 628 2

2012-04-26 0시 0분 0초 141 334 2

142 2012-05 -03 0시 0분 0초 (418)이

실제 결과 나는 가지고 있었다

(140) 2012-03 0시 0분 0초 -28 628 2

2012-04-03 0시 0분 0초 141 592 2

2012-04-04 0시 0분 0초 142 353 2

143 2012-

146 2,012 403 2 04-10 0시 0분 0초

2012-04-16 0시 0분 0초 144 635 2

2012-04-22 0시 0분 0초 145 673 2

-04-26 00:00:00 334 2

147 2012-05-03 0시 0분 0초 (418)이

사용 2017 MS SQL

+0

여기에서 많은 문제가 있습니다. SELECT T.AccountMin은 no, one 또는 multiple 값을 반환합니다. 전체 참여가 의미가 없습니다. 왼쪽 결합을 끊는 위치. – Paparazzi

답변

0

내 문제를 해결했다. I 은 외부 루프에서 2 개의 내부 루프를 사용했습니다. 그리고 물론 루프의 단계를 변경하는 것을 잊지 않았습니다. 추신 : 정확하게 사용하는 것은 다릅니다 - 전체 또는 내부 조인