PDA

View Full Version : سوال: شمارش تعداد سطرهای جدول تا جایی که دستور where محقق شود



niloofar norouzi
چهارشنبه 04 دی 1387, 14:01 عصر
با سلام

فرض کنید من جدولی دارم که دارای دو ستون است.
می خواهم تعداد سطرهایی از جدول را به دست آورم که منطبق بر نظر کاربر است.
با دستور TOP n باید مشخص کرد که دقیقاً چند سطر برای بازیابی مورد نظر است ولی در مورد سوال من این عدد معلوم نیست.
کاربر دو ورودی وارد می کند.
دستور select :



SELECE firstname,lastname FROM atable WHERE User_fname=firstname , User_lname=lastname

حالا می خواهم تعداد سطرهایی که شمره می شوند را به دست آورم.
دستور count همه سطرها را می شمارد ولی من می خواهم تا جایی شمرده شود که شرط
WHERE
محقق شود.

تولائی
چهارشنبه 04 دی 1387, 14:30 عصر
اگر منظورتان این است که تعداد سطرهایی که در where صدق می‌کنند دستور count راه‌انداز است.
در غیر این صورت دقیق‌تر منظورتان را مشخص کنید.

niloofar norouzi
چهارشنبه 04 دی 1387, 21:33 عصر
سلام

یک توضیح برای روشن تر شدن بحث

وقتی من از دستور زیر استفاده می کنم، تعداد سطرهایی را که در شرط صادق است را بر می گرداند
کد:
SELECE firstname,lastnameFROM atableWHERE User_fname=firstname , User_lname=lastnameSELECT @@ROWCOUNT
ولی منظور من این نیست.

فرض کنید که جدولی 50 سطر دارد و رکورد مورد نظر کاربر در سطر 20 قرار دارد. حالا می خواهم دقیقاً به این عدد 20 برسم

araelectronic@ymail.com
پنج شنبه 05 دی 1387, 02:37 صبح
سلام
دوست عزيز شما مي توانيد از يك فيلد شماره استفاده كنيد كه بهترين كار مي باشد.

حامد مصافی
پنج شنبه 05 دی 1387, 10:02 صبح
فرض کنیم این جدول شما یک فیلد id از نوع identity دارد.
لذا تمام فیلد های مورد نظر شما ID کوچک تر از ID فیلد منطبق بر شرط WHERE دارند. پس خواهیم داشت:


SELECT COUNT(*)
FROM atable
WHERE ID<(SELECT ID FROM atable WHERE User_fname=firstname , User_lname=lastname);

تولائی
پنج شنبه 05 دی 1387, 10:51 صبح
نظرت درباره‌ی این چی‌ه:


declare @tbl Table(rownumber int NOT NULL IDENTITY (1, 1),
User_fname varchar(50), User_lname varchar(50))
insert into @tbl select * from atable
select rownumber from @tbl where User_fname=firstname and User_lname=lastname

niloofar norouzi
شنبه 07 دی 1387, 08:13 صبح
نظرت درباره‌ی این چی‌ه:


declare @tbl Table(rownumber intNOTNULLIDENTITY(1, 1),
User_fname varchar(50), User_lname varchar(50))
insertinto @tbl select*from atable
select rownumber from @tbl where User_fname=firstname and User_lname=lastname



ولی خطای زیر را صادر می کند:


Server: Msg 2716, Level 16, State 1, Line 1
Column or parameter #2: Cannot specify a column width on data type int
.

niloofar norouzi
شنبه 07 دی 1387, 08:16 صبح
با سلام
اصل موضوع از این قرار است.
من برای عمل درج از وب سرویس استفاده می کنم.
برای نشان دادن سطرهای این جدول که بر اساس یکی از فیلدهایش به صورت صعودی مرتب است از دیتا گرید استفاده می کنم.
از دیتاگرید ویو استفاده نمی کنم.
فرض کنید کاربر دکمه درج را فشار می دهد . عمل درج انجام می شود. ممکن است سطر تازه درج شده در آخر جدول درج شود، ممکن است در اول جدول درج شود و ممکن است بین سطرهای دیگر جدول درج شود. چون یکی از فیلدهای جدول به صورت صعودی مرتب است.
من برای پیدا کردن سطر تازه درج شده توسط دستورات دیتا گرید به جایی نرسیدم .
حالا می خواهم با استفاده از روشی دیگر این کار را انجام دهم.
می خواهم این تعداد سطر را با دستورات اس کیو ال به دست آورم و همراه دیتا ست برای مشتری بفرستم.
با دانستن شماره سطر یک راست اشاره گر دیتا گرید را ببرم روی این سطر تازه درج شده.
نام این جدولEmployeeTerritiriesاست که متعلق به پایگاه دادهNorthwindاست

araelectronic@ymail.com
چهارشنبه 11 دی 1387, 11:31 صبح
با سلام
دوست عزيز شما ميتوانيد يك فيلد مانند insert_No داشته باشيد كه شماره ركورد شما بر حسب درج نشان دهد و برحسب آن كار خود را انجام دهيد .