PDA

View Full Version : فیلتر توسط شماره رکوردها با Sql



Mahdi_S_T
پنج شنبه 03 شهریور 1384, 17:16 عصر
چطوری میتوان توسط دستورات Sql بین دو شماره رکورد فیلتر ایجاد کرد مثلا شماره رکورد 15 تا 258 ؟

Kamyar.Kimiyabeigi
شنبه 05 شهریور 1384, 08:51 صبح
فکر کنم کد زیر کمکتون کنه


SELECT title_id, ytd_sales
FROM titles
WHERE ytd_sales BETWEEN 15 AND 258

Mahdi_S_T
شنبه 05 شهریور 1384, 15:13 عصر
عزیزم ما که فیلدی برای شماره رکورد نداریم که اینطوری عمل کنیم البته از متد RecNo میشه استفاده کرد ولی روش نوشتن SQL آنرا بلد نیستم ؟

Kamyar.Kimiyabeigi
شنبه 05 شهریور 1384, 17:07 عصر
شما اگه کلید اصلیتونو Identity تعریف کنین فکر کنم کد بالا جواب بده

nilufari
شنبه 05 شهریور 1384, 18:55 عصر
چون ممکنه در این بین یک رکوردو حذف کنه ، بنابراین نمیتونه بر اساس کلید اصلی شرط بزاره .

PalizeSoftware
شنبه 05 شهریور 1384, 19:03 عصر
عزیزم ما که فیلدی برای شماره رکورد نداریم که اینطوری عمل کنیم البته از متد RecNo میشه استفاده کرد ولی روش نوشتن SQL آنرا بلد نیستم ؟

دوست عزیز طراحی جدول شما در این کاربرد اشکال دارد. حتما باید فیلدی را بعنوان کلید اصلی معرفی کنید که شماره رکورد را در خود قرار دهد. محتویات بانک بصورت ترتیبی نیست که مثلا رکورد دوم همیشه در شماره رکورد استخراجی 2 قرار بگیرد. بعد از اضافه کردن فیلد خیلی راحت فیلتر کنید.

vcldeveloper
یک شنبه 06 شهریور 1384, 02:13 صبح
البته از متد RecNo میشه استفاده کرد ولی روش نوشتن SQL آنرا بلد نیستم ؟
RecNo بهیچوجه مقدار قابل اطمینانی نیست، این عدد موقیت رکورد در بین رکوردهای دریافت شده از بانک رو نشون میده - یعنی اگه در یک جدول 100 رکورد وجود داشته باشه و شما رکوردهای 20 تا 30 را از جدول واکشی کنید، RecNo این رکوردها 1 تا 10 خواهد بود!<!-- / message -->

حرفه ای
دوشنبه 07 شهریور 1384, 09:26 صبح
من از دستور زیر در SQL SERVER استفاده می کنم نمی دونم در سایر بانکها جواب می ده ؟

SELECT TOP 1000 * FROM BANKNAME

Mahdi_S_T
دوشنبه 07 شهریور 1384, 11:23 صبح
دوستان من یه جدول دارم و می خوام که رکوردهای آن چاپ بگیرم حالا می خوام بگم که مثلا از 1 تا 100 رو چاپ بگیره و بعدا در ادامه کار مثلا 100 تا 200 و ... ( در ضمن هیچ رکودی حذف نمی شود ) پس ظاهرا RecNo در اینجا کاربرد داشته باشد

Kamyar.Kimiyabeigi
دوشنبه 07 شهریور 1384, 17:08 عصر
من فکر میکنم شما باید روی Propertie های مربوط به برنامه ایی که میخواین باهاش Report بسازین کار کنین

علی باحجب مودتی
سه شنبه 08 شهریور 1384, 09:02 صبح
شما ابتدا باید به جدول خود شماره ردیف مجازی اضافه کنی
ولی به کلید اصلی یک فیلدی نیاز داری
شیوه کار به این صورت است
select ( select count(*) from tabel t1 where t1.p_key>= t2.p_key ) as reqNo ,t2.* from tabel t2
سپس باید شرط را بگذاری
select * from ( select ( select count(*) from tabel t1 where t1.p_key>= t2.p_key ) as reqNo ,t2.* from tabel t2 ) as tt
where tt.reqNo between x and y

علی باحجب مودتی
سه شنبه 08 شهریور 1384, 15:59 عصر
شما ابتدا باید به جدول خود شماره ردیف مجازی اضافه کنی
ولی به کلید اصلی یک فیلدی نیاز داری
شیوه کار به این صورت است
select ( select count(*) from tabel t1 where t1.p_key>= t2.p_key ) as reqNo ,t2.* from tabel t2
سپس باید شرط را بگذاری
select * from ( select ( select count(*) from tabel t1 where t1.p_key>= t2.p_key ) as reqNo ,t2.* from tabel t2 ) as tt
where tt.reqNo between x and y

علی باحجب مودتی
سه شنبه 08 شهریور 1384, 16:15 عصر
شما ابتدا باید به جدول خود شماره ردیف مجازی اضافه کنی
ولی به کلید اصلی یک فیلدی نیاز داری
شیوه کار به این صورت است
select ( select count(*) from tabel t1 where t1.p_key>= t2.p_key ) as reqNo ,t2.* from tabel t2
سپس باید شرط را بگذاری
select * from ( select ( select count(*) from tabel t1 where t1.p_key>= t2.p_key ) as reqNo ,t2.* from tabel t2 ) as tt
where tt.reqNo between x and y

Mahdi_S_T
چهارشنبه 09 شهریور 1384, 12:07 عصر
دوستان به هیچ عنوان امکان اضافه کردن فیلد به جدول نیست چون هر ماهه جدول از یک سازمان داده میشه و ما باید اطلاعات را بر روی فیش پرینت بگیریم( و واضح تر بگویم چون ما به یکباره نمی توانیم اطلاعات را پرینت بگیریم باید هر روز تعدادی از رکوردها را پرینت گرفت )

راه حل دیگر ؟ ممنون