Есть ли способ свести это утверждение к чему-то более простому для чтения? - PullRequest
0 голосов
/ 12 ноября 2019

У меня очень длинная инструкция CASE, которая просто изменяет числа в 3 разных местах CASE. Можно ли создать какую-то форму цикла и уменьшить этот код?

Это продолжается в течение 27 итераций, поэтому я сократил его, чтобы показать только первые 5. Любая помощь приветствуется!

SELECT [Loan Key]
      ,[Trans_Code]
      ,[Date]
      ,[NSF Charge]
      ,[Date Paid]
      ,[Amount Paid]
      ,CASE WHEN LEAD(TRANS_CODE, 1) OVER(PARTITION BY [Loan Key] ORDER BY [Date]) = '36' THEN [Amount Outstanding]
            WHEN LEAD([Loan Key], 2) OVER(PARTITION BY [Loan Key] ORDER BY [Date]) = LEAD([Loan Key], 1) OVER(PARTITION BY [Loan Key] ORDER BY [Date]) 
                  AND LEAD(TRANS_CODE, 2) OVER(PARTITION BY [Loan Key] ORDER BY [Date]) = '36' THEN LEAD([Amount Outstanding], 1) OVER(PARTITION BY [Loan Key] ORDER BY [Date])
            WHEN LEAD([Loan Key], 3) OVER(PARTITION BY [Loan Key] ORDER BY [Date]) = LEAD([Loan Key], 2) OVER(PARTITION BY [Loan Key] ORDER BY [Date]) 
                  AND LEAD(TRANS_CODE, 3) OVER(PARTITION BY [Loan Key] ORDER BY [Date]) = '36' THEN LEAD([Amount Outstanding], 2) OVER(PARTITION BY [Loan Key] ORDER BY [Date])
            WHEN LEAD([Loan Key], 4) OVER(PARTITION BY [Loan Key] ORDER BY [Date]) = LEAD([Loan Key], 1) OVER(PARTITION BY [Loan Key] ORDER BY [Date]) 
                  AND LEAD(TRANS_CODE, 4) OVER(PARTITION BY [Loan Key] ORDER BY [Date]) = '36' THEN LEAD([Amount Outstanding], 3) OVER(PARTITION BY [Loan Key] ORDER BY [Date])
            ELSE 0
        END AS [Amount Outstanding2]
      ,[Amount Waived]
  INTO #Summary4
  FROM #Summary3
WHERE [Loan Key] = '94523010'

1 Ответ

1 голос
/ 12 ноября 2019

Исходя из вашей логики, будет казаться гораздо проще написать следующее:

SELECT S3.[Loan Key]
      ,S3.[Trans_Code]
      ,S3.[Date]
      ,S3.[NSF Charge]
      ,S3.[Date Paid]
      ,S3.[Amount Paid]
      ,TC.Amount Outstanding
FROM #Summary3 S3
     CROSS APPLY (SELECT TOP (1) ca.Amount Outstanding
                  FROM #Summary3 ca
                  WHERE S3.[Loan Key] = ca.[Loan Key]
                    AND ca.TRANS_CODE = 36
                  ORDER BY ca.[Date] DESC) TC
WHERE S3.[Loan Key] = '94523010'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...