PDA

View Full Version : بازیابی رکورد با دادن موقعیت آن در جدول



hesam_hma
جمعه 12 بهمن 1386, 14:17 عصر
دوستان سلام
من می خواستم با استفاده از دستور Select رکورد مثلا 20 رو از یه جدول فراخوانی کنم ، (جدول مورد نظر هیچ فیلد عددی ندارد) - فرض کنید جدول من 100 تا رکورد داره من می خوام رکورد شماره 20 رو بازیابی کنم ، ممنون میشم راهنمایی بفرمایید

AminSobati
جمعه 12 بهمن 1386, 15:17 عصر
http://www.barnamenevis.org/forum/showthread.php?t=11186
http://www.barnamenevis.org/forum/showthread.php?t=17242

hesam_hma
جمعه 12 بهمن 1386, 22:35 عصر
سلام
جناب ثابتی با تشکر از راهنماییتون
اما من فقط میخوام که یه رکورد رو بازیابی کنم و سرعت وحجم کاری هم برام خیلی مهمه فکر کنم با join کردن دادهها هم سرعت بسیار پایین میاد و هم حجم اطلاعات زیاد میشه و ...
من یه دستور ساده نیاز دارم که یه رکورد رو برای من فراخوانی کنه مثلا رکورد دوم از جدول x

AminSobati
شنبه 13 بهمن 1386, 23:55 عصر
سلام! شما روی جدول میتونین row_number استفاده کنین (در 2005)، بعد این Query رو بعنوان SubQuery در نظر بگیرین، حالا Query بیرونی میتونه Where اعمال کنه و یک رکورد رو استخراج کنه

hesam_hma
یک شنبه 14 بهمن 1386, 00:10 صبح
جناب ثابتی از اینکه به سوالات با حوصله جواب میدهید واقعا ممنونم
اگه ممکنه یه نمونه کد از روشی که فرمودید بگذارید
بازم ممنون

reza_rad
یک شنبه 14 بهمن 1386, 07:33 صبح
دوستان سلام
من می خواستم با استفاده از دستور Select رکورد مثلا 20 رو از یه جدول فراخوانی کنم ، (جدول مورد نظر هیچ فیلد عددی ندارد) - فرض کنید جدول من 100 تا رکورد داره من می خوام رکورد شماره 20 رو بازیابی کنم ، ممنون میشم راهنمایی بفرمایید

اگه ممکنه یه نمونه کد از روشی که فرمودید بگذارید

این یک نمونه کد برای کار شما:



select * from
(
select field1,row_number() over (order by field2 asc) as rowNum from table1
)tbl
where rowNum=20

این هم برای مطالعه بیشتر:
ROW_NUMBER (Transact-SQL) (http://msdn2.microsoft.com/en-us/library/ms186734.aspx)

AminSobati
یک شنبه 14 بهمن 1386, 14:59 عصر
دست آقای راد درد نکنه! فقط این نکته رو اضافه کنم که تابع row_number اصطلاحا Deterministic نیست. یعنی وقتی روی field2 مرتب سازی میکنید، رکوردهایی که value یکسان در field2 دارند، ممکنه یکبار شماره فرضا 10 و بار دیگه شماره 11 رو بگیره.



PK country
--- -------
a Iran
b Iran
c Germany

در مثال بالا، وقتی order by روی country باشه، شما دو رکورد که از Iran باشند دارین. حالا رکوردی که pk اون برابر با a هست ممکنه مقدار 1 رو بگیره و در حالت دیگه ای از همین Query ممکنه 2 بهش اختصاص داده بشه. این غلط نیست چون بر مبنای order by هر دو Iran در مرتب سازی، یکسان تلقی میشن و اگر جا به جا هم بشن، اشتباهی صورت نگرفته. بعنوان جمع بندی تابع row_number تنها زمانی Deterministic هست که order by روی فیلد یونیک باشه.
این مطلب رو به این دلیل مطرح کردم که شما قصد دارین با where به یک رکورد خاص دسترسی پیدا کنید لذا وقتی داریم where rowNum=20 ممکنه در شرایط مختلف، دو رکورد متفاوت به شما ارائه کنه

hesam_hma
یک شنبه 14 بهمن 1386, 22:49 عصر
آقای ثباتی ممنون از یادآوریتون اما من توی Order کردن داده هام ساعت رو هم دخیل کردم که فکر کنم مشکل رو تا حد زیادی حل کنه
به هر حال ممنون