PDA

View Full Version : اشکال در دستور while



...azade
دوشنبه 12 دی 1390, 12:01 عصر
سلام
من یک جدول دارم که شامل فیلدهای سال و ترم و شاخصه حالا میخوام وقتی یک ترم با یک سال مشخص رو بهش دادم اگر وجود نداشت یک ترم برگرده عقب تا زمانیکه مقداری برای شاخص وجود داشته باشه ..این دستور رو نوشتم ولی مشکل داره :

WHILE((select AdjustmentSeasonFactor From TbSeasonFactor WHERE dbo.TbSeasonFactor.Id_Year =@Id_Year AND dbo.TbSeasonFactor.Id_Term = @Id_Term)isnull)
Begin
IF(@Id_Term=1)
BEGIN
SELECT AdjustmentSeasonFactor
From TbSeasonFactor
WHERE dbo.TbSeasonFactor.Id_Year =@Id_Year-1 AND dbo.TbSeasonFactor.Id_Term = 4
End
Else
Begin
SELECT AdjustmentSeasonFactor
From TbSeasonFactor
WHERE dbo.TbSeasonFactor.Id_Year =@Id_Year AND dbo.TbSeasonFactor.Id_Term = @Id_Term-1
End
End


اگر راهنمایی کنید ممنون میشم.

mohdeL
دوشنبه 12 دی 1390, 21:04 عصر
شما می توانید از دستور cursor استفاده نمایید

...azade
سه شنبه 13 دی 1390, 10:16 صبح
میشه راهنمایی کنید من نمیدونم چطور باید کرسر رو بنویسم.
از دوستان کسی دیگه نمیتونه راهنمایی کنه چون واقعا به حلش نیاز دارم.

baktash.n81@gmail.com
سه شنبه 13 دی 1390, 10:58 صبح
سلام

به نظرم خیلی دارید با الگوریتم های برنامه نویسی به SQL نگاه می کنید ... شاید احتیاجی به حلقه نباشد


Select top 1 ID From T1 where [Date]=@date order by [term] desc


با این کد شما ID بزرگترین Term مربوط به یه تاریخ رو به دست می آرید

...azade
سه شنبه 13 دی 1390, 11:42 صبح
ممنون دوست عزیز جوابتون بهم ایده داد اینم دستور درستش:
SELECT TOP (1) PERCENT AdjustmentSeasonFactor, Id_Year, Id_Term
FROM dbo.TbSeasonFactor
WHERE (Id_Year <= @Id_Year) AND (Id_Term <= @Id_Term)
ORDER BY Id_Year DESC, Id_Term DESC