PDA

View Full Version : مشکل در فیلد محاسباتی



m_soheyl_s
پنج شنبه 11 دی 1393, 19:38 عصر
من دو جدول به شکل زیر دارم و می خوام بر اساس هر کالا میانگین امتیازات اون کالا را با نام AvgScore به دست بیارم.
127123

کوئری که استفاده می کنم اینه:

select p.* , AVG(s.score) as AvgScore
from Product as p
join ScoreProduct as s
on p.IDprod = s.idprd
Group by s.idprd


اما ارور زیر را دریافت میکنم:


Msg 8120, Level 16, State 1, Line 1
Column 'Product.IDprod' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

mohammad reza beizavi
پنج شنبه 11 دی 1393, 20:21 عصر
درود بر شما
اگر * رو در select میذارید باید بر اساس تمام این فیلدها groupby رو انجام بدید
کافیه فقط فیلد s.idprd و avg رو در ستونها های انتخاب شده بذارید.



select p.idprd , AVG(s.score) as AvgScore
from Product as p
join ScoreProduct as s
on p.IDprod = s.idprd
Group by s.idprd



پیروز باشید

m_soheyl_s
پنج شنبه 11 دی 1393, 20:44 عصر
ممنون از پاسختون.
برای اینکه بخوام مقدار میانگین با دو رقم اعشار باشه باید چه کارکنم؟
نوع فیلد score رو Decimal(18,2) تعریف کردم.

mohammad reza beizavi
جمعه 12 دی 1393, 16:31 عصر
درود
متوجه نشدم، اگر منظورتون نمایش دورقم توی نتیجه هست که خودتون نوشتیدش، مگه اینکه تبدیل بخواید که باید اینجور باشه:


SELECT cast(avg(field) as decimal(10, 2)) as average
FROM table1


اگر غیر از اینه توضیح بدید

m_soheyl_s
جمعه 12 دی 1393, 20:07 عصر
درود
متوجه نشدم، اگر منظورتون نمایش دورقم توی نتیجه هست که خودتون نوشتیدش، مگه اینکه تبدیل بخواید که باید اینجور باشه:


SELECT cast(avg(field) as decimal(10, 2)) as average
FROM table1


اگر غیر از اینه توضیح بدید

با اینکه فیلد با دو رقم اعشارتعریف کردم اما وقت سلکت گرفتن جواب با بیشتر از دو رقم اعشار میده.
مشکل رو از درون سی شارپ حلش کردم فعلا.

mohammad reza beizavi
جمعه 12 دی 1393, 20:12 عصر
هنگام Query گرفتن باید مقدار اعداد بعد از اعشار رو مشخص کنید مثل نمونه ای که گذاشتم
چون از همین روش استفاده میکنم در کارهام مطمئنم جواب میده