PDA

View Full Version : خطا در کاربرد GROUP BY ...



ghasem110deh
سه شنبه 28 بهمن 1393, 13:10 عصر
سلام به همه ...
من از این کوئری استفاده کردم :

string chek = "SELECT Kala, AVG(Price), SUM(Andaze), SUM(Kol) From TBuy Group BY Kala";

واسه نمایش میانگین قیمت ، جمع کل تعداد کالای فروخته شده و کل قیمت فروخته شده از هر کالا ...
مشکلی هم نداره حالا میخوام از جدول کالا مقدار باقی مونده (موجودی کالا) رو تو سطر مربوط به هر کالا نشون بدم و به Kala آخر گیر میده :

string chek = "SELECT TBuy.Kala, AVG(TBuy.Price), SUM(TBuy.Andaze), SUM(TBuy.Kol), TKala.Andaze From TBuy INNER JOIN TKala ON TKala.Kala = TBuy.Kala Group BY Kala";

SabaSabouhi
سه شنبه 28 بهمن 1393, 13:28 عصر
سلام
1. همیشه اول query رو توی Management Studio یا Query خود VS تست کن.
2. اون TKala.Andaze که توی Select گذاشتی غلطه چون یا باید توی GROUP BY باشه یا از توابع گروهی مثل Sum یا Avg استفاده کنی.
3. از Pinglish استفاده نکن. Source هر برنامه‌نویس مثل امضای اون می‌مونه. Pinglish هم یک امضای بد خط هست.

صبا صبوحی

ghasem110deh
سه شنبه 28 بهمن 1393, 13:45 عصر
سلام
1. همیشه اول query رو توی Management Studio یا Query خود VS تست کن.
2. اون TKala.Andaze که توی Select گذاشتی غلطه چون یا باید توی GROUP BY باشه یا از توابع گروهی مثل Sum یا Avg استفاده کنی.
3. از Pinglish استفاده نکن. Source هر برنامه‌نویس مثل امضای اون می‌مونه. Pinglish هم یک امضای بد خط هست.

صبا صبوحی

سلام
1- یعنی توی خود sql تست کنم (new query) ?
2- نگرفتم چی شد ! هر چی جابجاش کردم باز یه خطا میده
3- انگلیسیم زیاد خوب نیست (customer و order و ... قاتی میکنم) :گیج:

SabaSabouhi
سه شنبه 28 بهمن 1393, 17:07 عصر
سلام
1- یعنی توی خود sql تست کنم (new query) ?
2- نگرفتم چی شد ! هر چی جابجاش کردم باز یه خطا میده
3- انگلیسیم زیاد خوب نیست (customer و order و ... قاتی میکنم) :گیج:

سلام
1. بله، البته تو خود Visual Studio هم می‌تونی این کار رو انجام بدی.
2. باید Join کنی. یعنی تو فرمان اول که درست بود رو تو FROM بگذار به عنوان یک جدول بعد Join کن با قسمت دوم.
3. نیازی نیست انگلیسیت خوب باشه، Translate.Google.Com این کار رو برات انجام می‌ده.

صبا صبوحی

ghasem110deh
سه شنبه 28 بهمن 1393, 21:20 عصر
اینم رفتم ، باز خطا داد ...

string chek = "SELECT TBuy.Kala, AVG(TBuy.Price), SUM(TBuy.Andaze), SUM(TBuy.Kol) From TBuy Group BY Kala TKala.Andaze INNER JOIN TKala ON TKala.Kala = TBuy.Kala";

sajadsobh
سه شنبه 28 بهمن 1393, 21:35 عصر
اینم رفتم ، باز خطا داد ...

string chek = "SELECT TBuy.Kala, AVG(TBuy.Price), SUM(TBuy.Andaze), SUM(TBuy.Kol) From TBuy Group BY Kala TKala.Andaze INNER JOIN TKala ON TKala.Kala = TBuy.Kala";



اشتباهه داداش. GROUP BY رو بد جایی بکار بردی. باید بعد از انجام پیوند بیاد. در آخر دستورات. بعدشم جلوش باید تمام فیلدهایی که جزء aggregationها نیست رو بیاری.

aslan
سه شنبه 28 بهمن 1393, 22:04 عصر
سلام
دوست عزیز بهتره اول کوئری را در sql بنویسید و .... اشکالیابی کنید
...
این کوئری که قرار دادین کلی اشکال داره :
- وقتی در سلکت فیلدی از Tkala وجود نداره پس چه نیازی به INNER JOIN هستش ؟
- وقتی در سلکت از SUM(TBuy.Andaze) استفاده کردین اصولا نباید از آن فیلد بعد از Group By استفاده کنین
- در صورت ضرورت در استفاده از جند فیلد در Group by بعد از نام هر فیلد باید از , استفاده کنید ( ویرگول)
- ....
در صورتی که موفق به رفع مشکلتون نشدید بهتر است حداقل تصویری از دو جدول داده و چیزی را که انتطار دارین بدست بیارین اینجا قرار دهید تا دوستان راحتتر بتونن کمک کنن
موفق باشید

SabaSabouhi
چهارشنبه 29 بهمن 1393, 09:03 صبح
سلام
این رو باید بدونی که نتیجه‌ی هر Select خودش یه جدوله.
پس اگه یه select با group by رو یه جدول فرض کنی و بهش یه اسم بدی، می‌تونی با جدول بعدی join کنی.


SELECT T1.*, T2.MyField4
FROM ( SELECT MyKey, MySum = SUM( Field1 ), MyMax = MAX( Field2 ), MyAvg = AVG( Field3 )
FROM MyTable1
GROUP BY MyKey ) T1
JOIN MyTable2 T2 ON T2.MyKey2 = T1.MyKey

امیدوارم که این مثال به دردت بخوره.

صبا صبوحی

ghasem110deh
چهارشنبه 29 بهمن 1393, 12:40 عصر
ممنون از همه دوستان ...
با کمک شما درست شد !
فکر کنم تا یه هفته نباید فکرکنم (از بس فسفر سوزوندم) :قهقهه: