PDA

View Full Version : recurcive in sql



*unos*
چهارشنبه 29 آبان 1387, 07:02 صبح
با سلام
من براي نوشتن يه sp نياز به مانده اعتبارات ماه قبل دارم (يعني براي مرداد نياز به تير دارم، براي تير نياز به مانده اعتبارات ماه خرداد دارم و ...).
چه شكلي مي تونم همچين چيزي بنويسم .؟
البته اين و براي يه ماه نوشتم اما چه شكلي ماه هاي قبلشو محاسبه كنه ؟ نمي دونم


CREATE PROCEDURE test
@date nvarchar(10),
@et_unit nvarchar(50)
AS
SELECT dbo.Etebarat.Et_Id, dbo.Etebarat.Et_Name,dbo.Etebarat.Et_Price,
Sum(Case When (dbo.Orderr.Dar_Date like @date+'%' ) Then dbo.Order_Detial.od_P_F Else 0 End ) AS curr_month
FROM dbo.Orderr INNER JOIN
dbo.Order_Detial ON dbo.Orderr.Dar_Id = dbo.Order_Detial.Od_Id RIGHT OUTER JOIN
dbo.Etebarat ON dbo.Order_Detial.Od_P_C = dbo.Etebarat.Et_Id
WHERE ((dbo.Etebarat.Et_Unit like @et_unit + '%'))
GROUP BY dbo.Etebarat.Et_Id, dbo.Etebarat.Et_Name, dbo.Etebarat.Et_Price
GO

ممنون ميشم اساتيد راهنمايي كنند

*unos*
چهارشنبه 29 آبان 1387, 11:34 صبح
آيا ميشه يه تابع بازگشتي تو sql نوشت ؟
اگه ميشه با مثال
ممنون

dzmode
چهارشنبه 29 آبان 1387, 11:47 صبح
با سلام خدمت شما
از توابع بازگشتي در function ها مي تونيد استفاده كنيد و نه در procrdure ها!!!!
به اين صورت كه بايد يك شرط خروج براي تابع بازگشتي در نظر بگيريد و بعد از آن

return dbo.functionname(input parameter name)
return( output parameter)

كه كد دوم return موجود در بدنه function مي باشد

dzmode
پنج شنبه 30 آبان 1387, 11:43 صبح
اينم يك مثال از يك تابع بازگشتي


createfunction dbo.ftreepath(@id int,@str varchar(100))
returnsvarchar(100)
as
begin
declare @p int
declare @val char
select @p=parentid from treepath where @id=id
select @val=val from treepath where @id=id
set @str=@val+'/'+@str
if(@p<>0)
return dbo.ftreepath(@p,@str)
return(@str)
end


اين تابع روي جدولtreeview با فيلدهاي id,parentid,val اجرا مي شود
:لبخندساده:

*unos*
شنبه 02 آذر 1387, 07:07 صبح
سلام حالا اگه بخوام اين تابع يه table با دوستون id,price برگردونه و در هر بازگشت مقدار فيلد price رو با بعديش جمع كنه چه شكلي ميشه نوشت
ممنون!
در آخرين بازگشت مي خوام price مجموع كل قبليها باشه!

*unos*
شنبه 02 آذر 1387, 07:12 صبح
فكر كردم شايد راه حل ديگه اي وجود داشته باشه
ببينيد دوستان
من يك گزارش مي خوام كه اعتبارات و هزينه هارو بر مي گردونه براي ماه n حالا
اعتبارات ماه n = اعتبارات ماه n -1 + اعتبارت ماه n
اعتبارات ماه n-1 = اعتبارات ماه n -2 +اعتبارات ماه n -1
.
.
.
اعتبارات ماه 2 = اعتبارات ماه 1 + اعتبارات ماه 2
اعتبارات ماه 1= اعتبارت ماه 1
به اين صورت.
چه راه حلي پيشنهاد ميديد
با تشكر