PDA

View Full Version : کمک در مورد جمع رکورد



fakhravari
یک شنبه 17 مهر 1390, 16:09 عصر
با سلام دوستان من از این کد استفاده میکنم
SELECT TOP 6 TBLNews.NewsID, TBLNews.Title, TBLNews.Abstract, TBLNews.Contents, TBLNews.AddDate, TBLNews.img, Sum(RatingPost.Rating) AS SumOfRating, Count(RatingPost.PostID) AS CountOfPostID
FROM TBLNews Left Outer Join RatingPost ON TBLNews.NewsID = RatingPost.PostID
GROUP BY TBLNews.NewsID, TBLNews.Title, TBLNews.Abstract, TBLNews.Contents, TBLNews.AddDate, TBLNews.img
ORDER BY NewsID DESC;

درسته و کار میده ولی تی جدولی که رای ثبت نشده مقداری برنمیگردونه
مثال
مقدار درست که برای پست ها ثبت شده
افراد رای دهنده: [ 1 ] جمع امتیاز : [ 4 ]
و جدولی که رای ثبت نشده
افراد رای دهنده: [ 0 ] جمع امتیاز : [ ]
یعنی جاشو خالی میزاره.
دوستان چی کار کنم

fakhravari
یک شنبه 17 مهر 1390, 16:13 عصر
inam ax az mohit barname

Galawij
یک شنبه 17 مهر 1390, 16:44 عصر
سلام،
با یک تابع مقدار Null را کنترل کنید.مثال:

ALTERFUNCTION [dbo].[IsZero] (@Number nvarchar(50),@IsZeroNumber nvarchar(50))
RETURNSnvarchar(50)
AS
BEGIN
IF(@Number ='0')
BEGIN
SET @Number = @IsZeroNumber
END
RETURN(@Number)
END
و طریقه استفاده:

Select dbo.IsZero(convert(nvarchar(50),count(id)),'0')
From dbo.Table_1

fakhravari
دوشنبه 18 مهر 1390, 10:35 صبح
با سلام
اگه میشه کمی توضیح بدین من به چه شکل به کد بالا اضافه کنم؟
با سپاس

Galawij
دوشنبه 18 مهر 1390, 16:31 عصر
دوست عزیز،
در مثالی که گذاشتم،طریقه استفاده هم آورده شده. در مورد کد شما به این صورت:
SELECTTOP 6 TBLNews.NewsID, TBLNews.Title, TBLNews.Abstract, TBLNews.Contents, TBLNews.AddDate, TBLNews.img, dbo.IsZero(convert(nvarchar(50),Sum(RatingPost.Rat ing)),'0')AS SumOfRating, dbo.IsZero(convert(nvarchar(50),Count(RatingPost.P ostID)),'0')AS CountOfPostID
FROM TBLNews LeftOuterJoin RatingPost ON TBLNews.NewsID = RatingPost.PostID GROUPBY TBLNews.NewsID, TBLNews.Title, TBLNews.Abstract, TBLNews.Contents, TBLNews.AddDate, TBLNews.img ORDERBY NewsID DESC;

fakhravari
دوشنبه 18 مهر 1390, 19:06 عصر
سلام
توی زمان اجرا از dbo error میگیره؟ چرا؟

Cannot find either column "dbo" or the user-defined function or aggregate "dbo.IsZero", or the name is ambiguous.

fakhravari
دوشنبه 18 مهر 1390, 21:50 عصر
با سلام
galavezh عزیز اگه امکان داره مشکل این کد بگین .
توی زمان اجرا از dbo error میگیره؟ چرا؟

Cannot find either column "dbo" or the user-defined function or aggregate "dbo.IsZero", or the name is ambiguous

یوسف زالی
دوشنبه 18 مهر 1390, 23:26 عصر
سلام.
در sum(rating) -- in select از isnull استفاده کنید:
sum(isnull(rating, 0)) -- test
موفق باشید.

fakhravari
سه شنبه 19 مهر 1390, 01:57 صبح
با سپاس از yousijoon و galavezh
ممنون به این شکل درست شد
ALTER PROCEDURE dbo.RatingAmar
AS
begin
SELECT TOP 6 TBLNews.NewsID, TBLNews.Title, TBLNews.Abstract, TBLNews.Contents, TBLNews.AddDate, TBLNews.img, isnull(convert(nvarchar(50),Sum(RatingPost.Rating) ),'0')AS SumOfRating, isnull(convert(nvarchar(50),Count(RatingPost.PostI D)),'0')AS CountOfPostID
FROM TBLNews Left Outer Join RatingPost ON TBLNews.NewsID = RatingPost.PostID
GROUP BY TBLNews.NewsID, TBLNews.Title, TBLNews.Abstract, TBLNews.Contents, TBLNews.AddDate, TBLNews.img
ORDER BY NewsID DESC;
end

fakhravari
سه شنبه 19 مهر 1390, 02:00 صبح
دوستان میشه لینک فایل راهنمایی در مورد همین دستورات sp بدین که شرط کنترلی هم ذکر شده باشه.:لبخند::چشمک:

fakhravari
یک شنبه 24 مهر 1390, 00:38 صبح
با سلام خدمت دوستان
من به کد بالا می خواهم تعداد count نظرات اضافه کنم .
جدول نظرات به این شکل است
NameFamily, PostID, Date, Email, Comment
اسم بانک Comments
فقط مقدار cunt برگردونه که PostID=PostID باشه.
با سپاس

fakhravari
دوشنبه 25 مهر 1390, 22:19 عصر
با سلام
دوستان اگه میشه راهنمایی کنید .
select az 3 jadval

یوسف زالی
سه شنبه 26 مهر 1390, 04:51 صبح
اگر ار (count(1 استفاده کنید مشکل کجاست؟

fakhravari
سه شنبه 26 مهر 1390, 13:25 عصر
با سلام
من با این کد جواب نمیگیرم اگه میشه راهنمایی کنید

SELECT TOP 6 TBLNews.NewsID, TBLNews.Title, TBLNews.Abstract, TBLNews.Contents, TBLNews.AddDate, TBLNews.img, Sum(RatingPost.Rating) AS SumOfRating, Count(RatingPost.PostID) AS CountOfPostID, Count(Comments.ID) AS CountOfID
FROM (TBLNews Left Outer Join RatingPost ON TBLNews.NewsID = RatingPost.PostID ) Left Outer Join Comments ON TBLNews.NewsID = Comments.PostID
GROUP BY TBLNews.NewsID, TBLNews.Title, TBLNews.Abstract, TBLNews.Contents, TBLNews.AddDate, TBLNews.img
ORDER BY NewsID DESC;

فقط 1 فیلد جابجا میگه
در کد قبل که select از 2 جدول بود مشکلی نیست . ولی select 3 جدول شرط برقرار میشه اما یه مشکلی داره توی جمع زدن
اگه دوستان کمکی کنند

mehran_sh_t
جمعه 29 مهر 1390, 09:37 صبح
در جدول نظرات از کد زیر استفاده کنید، فک کنم جواب بده!


SELECT Count(PostID) From Comments WHERE PostID = pID GroupBy PostID

fakhravari
جمعه 29 مهر 1390, 13:01 عصر
سلام
اید کد به چه شکل به کد بالا اضافه کنم؟:متفکر:

fakhravari
چهارشنبه 04 آبان 1390, 11:33 صبح
با سلام خدمت اقای صادقیان
من مشکل در کد بالا فقط اینکه فقط 1 رکورد جدول اشتباه میگه و بقیه درست هستند .
خیلی وقت سوال را مطرح کردم اما جوابی برای این قسمت نگرفتم.:ناراحت:
اگه دوستان کمک کنند ممنون میشم:خجالت:

fakhravari
یک شنبه 08 آبان 1390, 02:49 صبح
با سلام
اقای صادقیان دیگه امار دلیت های این پست زیاد شده.
حد اقل شما بگویید مشکل این کد. :ناراحت:
دوستان که یاری نمیکنند دیگه:افسرده:

fakhravari
چهارشنبه 11 آبان 1390, 01:29 صبح
:گیج: جواب نگرفتم:اشتباه:
یکی از دوستانم سوال نمیکنه تا دلمون خوش شه:ناراحت:

یوسف زالی
چهارشنبه 11 آبان 1390, 11:36 صبح
دوست من؛
بیا از اول ببینیم چی می خوای؟
این امتیاز چیه؟
این جوری راحت تر میشه کمک کرد.

fakhravari
چهارشنبه 11 آبان 1390, 12:33 عصر
با سلام
ببنید من یه جدول اخبار دارم .و یک جدول امتیاز دهی به اخبار و یک جدول نظرات
من select جوری گرفتم که 6 تا اخبار اول جدول اخبار بر حسب order by id desc نشون میده
در select من بر حسب Left Outer Join است که مقایسه میکنه id اخبار با id جدول نظرات و id جدول امتیاز .
در صورت وجود داشتن مقدار برمیگردونه و ر نه 0 میگذاره .
من فیلد های جدول می گذارم
اخبار TBLNews
NewsID, Title, Abstract, Contents, AddDate, img
نظرات Comments
ID, PostID, NameFamily, Date, Email, Comment
امتیاز RatingPost
ID, Rating, UserName, PostID

شما برای جدول بالا چه کدی مینویسید

یوسف زالی
چهارشنبه 11 آبان 1390, 14:15 عصر
select top 6 *, (select count(1) from Comments where PostID = NewsID) as Posts, (select count(1) from RatingPost where PostID = NewsID) as Rates
from TBLNews
order by NewsID desc

اینجا من کلید خارجی رو PostID گرفتم که به NewsID لینک داده شده.
ببینید اونی هست که لازم دارید؟

fakhravari
چهارشنبه 11 آبان 1390, 15:31 عصر
با سلام خدمت yousijoon عزیز
من یه نمونه با دیتابیس access درست کردم .
اگه ممکن ببینید.
درون این دیتابیس 2 تا مثال است که مشکلی ندارن Select از 2 جدول.
ولی اگر امکان داره شما درون همین دیتابیس یک Query ایجاد کرده و Select از 3 جدول تست کنید
با سپاس

Abbas Amiri
شنبه 14 آبان 1390, 22:26 عصر
اگر فقط دریکی از دوجدول دیگر شرط برقرار بود یا در هردوجدول ویا الزاما یک جدول بخصوص مقدار برگردانده شود؟

fakhravari
یک شنبه 15 آبان 1390, 12:10 عصر
با سلام Abbas Amiri (http://barnamenevis.org/member.php?189381-Abbas-Amiri)
من از هر 3 جدول مقدار دارم منظور شما رو نفهمیدم

baktash.n81@gmail.com
یک شنبه 15 آبان 1390, 15:39 عصر
سلام

امیدوارم این کد کمک کنه
در مورد راهنمایی کد هم فقط اینو بدون که دستور داخل پرانتز بعد از Cross Apply برای هر رکورد Select بیرونی یه بار اجرا میشه ... پس کلا زیاد رو سرعت و پرفومنسش حساب نکن ... یه نکته هم در مورد نام گذاری فیلدهای جدولت بیشتر دقت کن مثلا هم جدول Comment فیلد ID داره هم Rate بهتره که اسمشون مشخص باشه ... CommentID و ...


SELECTtop 6 TBLNews.NewsID, TBLNews.Title, TBLNews.Abstract, TBLNews.Contents, TBLNews.AddDate, TBLNews.img
,isnull(convert(nvarchar(50),Sum(RatingPost.Rating )),'0')AS SumOfRating
,isnull(convert(nvarchar(50),Count(RatingPost.Post ID)),'0')AS CountOfPostID
, C.countComments
FROM TBLNews LeftOuterJoin RatingPost ON TBLNews.NewsID = RatingPost.PostID
cross apply(Selectdistinctcount(id)as countComments from comments where postid=tblnews.newsid) c
GROUPBY TBLNews.NewsID, TBLNews.Title, TBLNews.Abstract, TBLNews.Contents, TBLNews.AddDate, TBLNews.img,c.countComments ORDERBY NewsID DESC

fakhravari
یک شنبه 15 آبان 1390, 22:07 عصر
با سلام
ممنون از پاسختون.
خطا زیر رو میده

baktash.n81@gmail.com
سه شنبه 17 آبان 1390, 11:30 صبح
create proc sptest
as
begin
SELECT top 6 TBLNews.NewsID, TBLNews.Title, TBLNews.Abstract, TBLNews.Contents, TBLNews.AddDate, TBLNews.img
, isnull(convert(nvarchar(50),Sum(RatingPost.Rating) ),'0')AS SumOfRating
, isnull(convert(nvarchar(50),Count(RatingPost.PostI D)),'0')AS CountOfPostID
, C.countComments
FROM TBLNews Left Outer Join RatingPost ON TBLNews.NewsID = RatingPost.PostID
cross apply (Select distinct count(id) as countComments from comments where postid=tblnews.newsid) c
GROUP BY TBLNews.NewsID, TBLNews.Title, TBLNews.Abstract, TBLNews.Contents, TBLNews.AddDate, TBLNews.img,c.countComments ORDER BY NewsID DESC
end

fakhravari
چهارشنبه 18 آبان 1390, 12:33 عصر
با سلام
ممنون از جواب .
خطای زیر میده
از from اخطار میگیره

baktash.n81@gmail.com
چهارشنبه 18 آبان 1390, 15:27 عصر
نسخه SQL ات باید 2008 باشه ... ( نمی دونم 2005 هم دستور Apply رو پشتیبانی می کنه یا نه )
تو این کدی که گذاشتی بعضی جاها Space ها حذف شده و کد ها به همدیگه چسبیده, به اینم دقت کن
یک بار کد رو تو خود sql امتحان کن
رو سیستم من که مشکلی نداره.

fakhravari
چهارشنبه 18 آبان 1390, 22:37 عصر
با سلام 2005 sql من:اشتباه:
دوستان با 2005 کمک کنید

fakhravari
دوشنبه 23 آبان 1390, 01:55 صبح
مدیریت من که به جواب نرسیدم.
اقای صادقیان گوشه چشمی بنداز

یوسف زالی
یک شنبه 06 آذر 1390, 19:51 عصر
آقا جان ببین درست متوجه شدم؟
لیست 6 خبر آخر به همراه ضمائم آن که شامل تعداد نظرات و تعداد لایک های هر خبر کنارش می شه.
کد:


select top 6 *,
(select COUNT(1)from Comments where PostID = NewsID) Comments,
(select COUNT(1)from RatingPost where PostID = NewsID) Rates
from TBLNews
order by NewsID desc

fakhravari
یک شنبه 06 آذر 1390, 23:56 عصر
با سلام
کد زیر خروجی مورد نظر من رو داره .
SELECT TOP (2) NewsID, Title, Abstract, Contents, AddDate, img,
(SELECT COUNT(1) AS CountOfPostID
FROM Comments
WHERE (PostID = TBLNews.NewsID)) AS Comments,
(SELECT SUM(Rating) AS SumOfRating
FROM RatingPost
WHERE (PostID = TBLNews.NewsID)) AS Rates,
(SELECT COUNT(1) AS CountOfID
FROM RatingPost AS RatingPost_1
WHERE (PostID = TBLNews.NewsID)) AS Rates
FROM TBLNews
ORDER BY NewsID DESC
اما قسمت های COUNT(1) AS CountOfPostID و SUM(Rating) AS SumOfRating و COUNT(1) AS CountOfID در برنامه نویسی به مقدار های as آنها دسترسی ندارم.
دوستان به چه شکل عمل کنم:متفکر:

fakhravari
چهارشنبه 09 آذر 1390, 02:38 صبح
با سلام
دوستان این پست مشاهده ها: 845 شده دیگه بهتر با یاری دوستان به پایانش ببریم. :خجالت:
جواب رو با کد پست 34 بدست اوردم و فقط مشکلم دسترسی نداشتن به مقدار AS است.:افسرده:

fakhravari
چهارشنبه 09 آذر 1390, 02:56 صبح
با سلام
جواب بدست اوردم. ممنون از همه دوستان که یاری کردن

ALTER PROCEDURE dbo.RatingAmar
AS
begin
SELECT TOP (6) NewsID, Title, Abstract, Contents, AddDate, img,
(SELECT isnull(convert(nvarchar(50),Count(1)),'0')
FROM Comments
WHERE (PostID = TBLNews.NewsID)) AS CountOfID,
(SELECT isnull(convert(nvarchar(50),Sum(RatingPost.Rating) ),'0')
FROM RatingPost
WHERE (PostID = TBLNews.NewsID)) AS SumOfRating,
(SELECT isnull(convert(nvarchar(50),Count(1)),'0')
FROM RatingPost AS RatingPost_1
WHERE (PostID = TBLNews.NewsID)) AS CountOfPostID
FROM TBLNews
ORDER BY NewsID DESC
end;


:بوس: :لبخند: