ストアド プロシージャで任意の計算を実行し、データを返すことができます。ストアド プロシージャのような利息計算には、多くの計算が必要です。
他のテーブルデータを使用してデータを計算する必要がある方法。
SPでできるSUM、
Declare @SUMAmount decimal(12,3)
-- @A、@B なども宣言します
Select @SUMAmount= SUM(ISNULL(@A,0)+ISNULL(@B,0)+ISNULL(@C,0)+ISNULL(@D,0))
Select @SUMAmount= SUM((ISNULL(@A,0)+ISNULL(@B,0))*(ISNULL(@C,0)-ISNULL(@D,0)))
あなたの要件に従って、条件を与えることができます。
ISNULL は、データが NULL かどうかのチェックに使用され、0 を返します。Null 値での計算はできないため、ISNULL 条件を指定することをお勧めします。
Select A,B,SUM(C),D From TableName
Where SUM(C)>0
Group By A,B,D
ここでは、集計関数と非集計関数の両方が存在するため、Group By を使用する必要があります。「SUM(C)>0」のように、条件に従って値を取得できます。Group Byの後にここを使用することもできます。
Declare @TotalNoofDays int
@TotalNoofDays = DATEDIFF(d, fromdate, todate)
この関数を使用して日数を検索するために使用します。
次のような条件を使用できます。
if @DueAmount >=0
BEGIN
IF @DiscountFlag = 1
BEGIN
SET @DueIntAmount = 0
END
ELSE
BEGIN
SET @DueIntAmount = ((@DueAmount*(@IntRateOnDue/100))/365)*@NoofDays
END
SET @ExcessInterestAmount = 0
END
ELSE
BEGIN
SET @DueIntAmount = 0
SET @ExcessInterestAmount = ((@DueAmount*(@IntRateOnDeposit/100))/365)*@NoofDays
END
ストアド プロシージャで実行できる計算と同様です。
レコード数を 1 つずつ計算する場合は、一時テーブル while ループを使用できます。
Create Proc NewLearningProcedure
(
@Name Varchar(50),
@Date DateTime
)
AS
Begin
Declare @Temp Table
(
ID int Identity(1,1),
Name Varchar(50),
Date DateTime
)
Insert Into @Temp
Select @Name,@Date
Declare @i int
set @i=10
While @i>0
Begin
Insert Into @Temp
Select @Name+CAST(@i as varchar(50)),@Date
Set @i=@i-1
End
Select * from @Temp
End
ストアドプロシージャで何でもできるように。