그리고 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 2147 2012-05-03 0시 0분 0초 (418)이
사용 2017 MS SQL
여기에서 많은 문제가 있습니다. SELECT T.AccountMin은 no, one 또는 multiple 값을 반환합니다. 전체 참여가 의미가 없습니다. 왼쪽 결합을 끊는 위치. – Paparazzi