محمد ممنون بابتي كمكي كه كردي براي نوشتن اين كوئري ، مشكلم رو حل كرد ، اما الان نياز دارم كه يخورده تغييرش بدم.
اين كوئري براي همه ركوردها با يك فرمول عمل مي كنه در حالي كه الان لازم دارم براي تعدادي از ركوردهاي جدول كه هميشه در انتهاي جدول هستند و تعدادشون كمتر از 2000 تا هم هست با مقادير ديگه اي حساب كنه يعني 2000 و 250 و 249 كه تو كد استفاده شده اعداد ديگه اي باشن
كدي كه الان من دارم استفاده مي كنم اينه :
declare @Numbers table(i int)
insert into @Numbers
select top 985977 row_number()over(order by (select 1)) from sys.columns a,sys.columns b, sys.columns c
UPDATE YT SET YT.r2 = C.radif
FROM (select * , ROW_NUMBER() OVER(ORDER BY [dav])AS ROWNUM
from [MakeRadifMajazi].[dbo].[rdf])AS YT
INNER JOIN( select i,case when i%2000 = 0 then i-2000 else (2000*(i/2000)) end
+case(i%250)when 0 then 249 else(i%250-1)end *8+((rnk+249)/250) as radif
from (select i, row_number() over(partition by (i+(8*250)-1)/(8*250) order by i) rnk
from @NUMBERS
WHERE i <= 985977
)d
)c ON
[YT].ROWNUM = c.i
مثلا تو اين مثال براي 1977 تاي آخر لازمه كه عدد 2000 تغيير بكنه به 1977 و 255 تغيير بكنه 247 و 249 تغيير بكنه به 246 ؛ فكر مي كنم نياز به يك شرط هست كه وقتي مقدار i بيشتر از 984000 شد از مقاديري كه گفتم جهت محاسبه استفاده كنه اين شرط رو بايد كجا نوشت؟





پاسخ با نقل قول