Member 12770648 Ответов: 1

Реорганизация cte с помощью case statement


Нужно реорганизовать недооцененные с помощью параметров вместо



----------------UPLOADING FROM LOANS_TRANS---------------
              ----------------UPLOADING FROM LOANS_TRANS---------------
              UPDATE L
                     SET  L.TOT_ACT_INT =  L.TOT_ACT_INT + LT.AMOUNTSUN
                 FROM LOANS L
                 INNER JOIN
                 (
                 SELECT IDNO,ID_CODE,TRANS_TYPE, SUM(AMOUNT) AS AMOUNTSUN
                    FROM LOAN_TRANS LT
                    GROUP BY IDNO,ID_CODE,TRANS_TYPE
                ) LT
                 ON L.IDNO=LT.IDNO AND L.LOANUMBER=LT.ID_CODE
                 WHERE  LT.TRANS_TYPE= 'INTEREST'

              ----------------UPLOADING FROM LOANS_TRANS---------------
              ----------------UPLOADING FROM LOANS_TRANS---------------


            ----------------UPLOADING FROM LOANS_TRANS---------------
              ----------------UPLOADING FROM LOANS_TRANS---------------
              UPDATE L
                     SET  L.TOT_ACT_PRIN =  L.TOT_ACT_PRIN+ LT.AMOUNTSUN
                 FROM LOANS L
                 INNER JOIN
                 (
                 SELECT IDNO,ID_CODE,TRANS_TYPE, SUM(AMOUNT) AS AMOUNTSUN
                    FROM LOAN_TRANS LT
                    GROUP BY IDNO,ID_CODE,TRANS_TYPE
                ) LT
                 ON L.IDNO=LT.IDNO AND L.LOANUMBER=LT.ID_CODE
                 WHERE  LT.TRANS_TYPE= 'PRINCIPAL'




WHERE  LT.TRANS_TYPE= 'INTEREST'

WHERE  LT.TRANS_TYPE= 'PRINCIPAL'



Хотите запрограммировать этот бит вместо жесткого кодирования любого предложения или совета


Спасибо

Что я уже пробовал:

Это коды в программе и я хочу их обобщить

1 Ответов

Рейтинг:
0

CHill60

Не уверен в названии вашего поста, так как в коде, которым вы поделились, нет CTE.

Хранимая процедура с параметрами выглядит хорошим решением, например (NB untested)

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE sp_UploadTrans
	@tran1 varchar(30),
	@tran2 varchar(30)
AS
BEGIN
	SET NOCOUNT ON;
	----------------UPLOADING FROM LOANS_TRANS---------------
	UPDATE L
		SET  L.TOT_ACT_INT =  L.TOT_ACT_INT + LT.AMOUNTSUN
		FROM LOANS L
		INNER JOIN
		(
			SELECT IDNO,ID_CODE,TRANS_TYPE, SUM(AMOUNT) AS AMOUNTSUN
			FROM LOAN_TRANS LT
			GROUP BY IDNO,ID_CODE,TRANS_TYPE
		) LT ON L.IDNO=LT.IDNO AND L.LOANUMBER=LT.ID_CODE         
		WHERE  LT.TRANS_TYPE= @tran1
		        
	UPDATE L
		SET  L.TOT_ACT_PRIN =  L.TOT_ACT_PRIN + LT.AMOUNTSUN
		FROM LOANS L
		INNER JOIN
		(
			SELECT IDNO,ID_CODE,TRANS_TYPE, SUM(AMOUNT) AS AMOUNTSUN
			FROM LOAN_TRANS LT
			GROUP BY IDNO,ID_CODE,TRANS_TYPE
		) LT ON L.IDNO=LT.IDNO AND L.LOANUMBER=LT.ID_CODE         
		WHERE  LT.TRANS_TYPE= @tran2
END
GO
который я думать может быть рационализирован вплоть до
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE sp_UploadTrans
	@tran1 varchar(30),
	@tran2 varchar(30)
AS
BEGIN
	SET NOCOUNT ON;
	----------------UPLOADING FROM LOANS_TRANS---------------
	UPDATE L
	SET  L.TOT_ACT_INT =  case when LT.TRANS_TYPE= @tran1 THEN L.TOT_ACT_INT + LT.AMOUNTSUN ELSE L.TOT_ACT_INT END,
	L.TOT_ACT_PRIN =  CASE WHEN LT.TRANS_TYPE= @tran2 THEN L.TOT_ACT_PRIN + LT.AMOUNTSUN ELSE L.TOT_ACT_PRINT END
	FROM LOANS L
	INNER JOIN
	(
		SELECT IDNO,ID_CODE,TRANS_TYPE, SUM(AMOUNT) AS AMOUNTSUN
		FROM LOAN_TRANS LT
		GROUP BY IDNO,ID_CODE,TRANS_TYPE
	) LT ON L.IDNO=LT.IDNO AND L.LOANUMBER=LT.ID_CODE         
END
GO

Предостережение - я не тестировал ничего из этого (но это единственное решение, предлагаемое через 3 дня, так что стоит посмотреть хотя бы)

[Правка] эта статья может оказаться полезной: Sql Server - как написать хранимую процедуру в SQL Server[^]