ورود

View Full Version : كد SQL محدود كردن تعداد ركوردها



دنیای دلفی
جمعه 01 خرداد 1388, 21:27 عصر
سلام به دوستان .

يك جدول وجود دارد به نام a با فيلدهاي نمره (no) و كد درس (code)

كد SQL ي مي خواهم كه بتواند مثلا ركوردهاي را فيلتر كند كه فقط 50 نمره بالاي كسب شده باشند . و مربوط به يك كد درس خاص هم باشند

با كد زير مي تونم فقط كليه ركوردهاي درسي با كد 20 را از بيشتر به كمتر بدست آورم ولي من فقط مثلا 50 تاي اول را مي خواهم

Select * From a Where Code=20 Order by no

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

Ahmad Chehreghani
جمعه 01 خرداد 1388, 21:42 عصر
کد SQL زير 10 رکورد اول جدول Table1 که شماره هاي آن (no) برعکس مرتب شده اند را مي آورد


SELECT TOP 10 *
FROM Table1
ORDER BY no DESC

Saeed_m_Farid
جمعه 01 خرداد 1388, 22:02 عصر
فکر نمی کنم دستور جامعی برای تمام بانکهای اطلاعاتی برای اینکار وجود داشته باشد، برای هرکدوم فرق میکنه، برای نمونه تو Sql-Server و اراکل، بصورت زیر می باشد :


for SQL-Server :

Select Top 50 * From a Where Code=20 Order by no

-- ***********************************************

for Oracle :

Select * From a Where (Code = 20) AND (ROWNUM < 50) Order by no

امیدوارم کمک کرده باشم ...

دنیای دلفی
یک شنبه 03 خرداد 1388, 01:05 صبح
ممنون از راهنمايي شما :
حالا مي خواهم كامل ترش كنم يعني تعداد ركوردهايي را كه مي خواهد نمايش دهد از بانك ديگري بخواند .
يعني در جدول b دو فيلد وجود دارد يكي كد درس code و ديگري تعداد ظرفيت count مي خواهم طوري باشد كه تعداد را از جدول دوم بخواند كه البته در جدول دوم بايد يك where براي code بگذاريم

مثل همچين كدي حالا نمي دونم چطور درستش كنم :



Select Top b.count * From a Where ((Code=20)and(b.code=20)) ORDER BY no DESC

mehdimdp
یک شنبه 03 خرداد 1388, 12:20 عصر
select top 50 b.count,a.*
from b inner join a on b.code=a.code
order by b.no

دنیای دلفی
یک شنبه 03 خرداد 1388, 13:49 عصر
ممنون ولي من اينجا به جاي عدد 50 مي خواهم count از جدول b را بگذارم حالا به چه صورت مي شود

shervin farzin
یک شنبه 03 خرداد 1388, 15:08 عصر
سلام
كد SQL مورد نظرتون به شكل زير هست :

declare @tmp int
select @tmp = Count(*) from b
exec('select top '+@tmp+' * from a Where ((Code=20)and(b.code=20)) ORDER BY no DESC')
موفق باشيد .

دنیای دلفی
سه شنبه 05 خرداد 1388, 00:17 صبح
declare @tmp int
select @tmp = Count(*) from b
exec('select top '+@tmp+' * from a Where ((Code=20)and(b.code=20)) ORDER BY no DESC')

متاسفانه اين كد خطا مي ده مخصوصا روي پارامترها آيا نوعي ديگه نمي شه نوشتش

shervin farzin
سه شنبه 05 خرداد 1388, 01:26 صبح
سلام
اين كد براي Database هاي SQL قطعا جواب ميده . ممكنه بفرماييد كه از چه Database استفاده
ميكنيد و متن خطا چيه ؟

دنیای دلفی
چهارشنبه 06 خرداد 1388, 11:12 صبح
سلام
اين كد براي Database هاي SQL قطعا جواب ميده . ممكنه بفرماييد كه از چه Database استفاده
ميكنيد و متن خطا چيه ؟

بانك اطاعاتي مورد استفاده SQL SERVER 2005 زبان برنامه نويسي VS 2005.NET C#-ASPX
كسي نگه چرا سوال را دربخش دلفي پرسيدي آخه بخش دلفي خانه ماست .

در مورد خطا مي گه select @tmp = Count(*) from b اين بخش را درك نمي كنه

shervin farzin
چهارشنبه 06 خرداد 1388, 21:33 عصر
سلام
اين كد رو در SQL 2005 امتحان كنيد :

declare @tmp int
select @tmp = count(*) from b
select top(@tmp) * from a
در ضمن در خط سوم كدتون كه نوشتيد b.code بايد جدول b رو هم در قسمت From بنويسيد .
موفق باشيد .