PDA

View Full Version : مشکل در join دو جدول



نیما حتمی
دوشنبه 19 آبان 1393, 08:58 صبح
با سلام
من دو تا از جداولمو باهم join کردم این ارورو میده:
125474
اینم کدم:

try
{
connect.Open();
//SqlDataAdapter insert = new SqlDataAdapter(@"select ReciveKoli.mony,MaliPeyment.MonyPeyment,Kolipeymen t.Mony from ReciveKoli inner join MaliPeyment on ReciveKoli.TarafhesabName=MaliPeyment.TarafhesabNa me inner join Kolipeyment on ReciveKoli.TarafhesabName=Kolipeyment.TarafhesabNa me where kolipeyment.TarafhesabName='" + Tarafhesab.Text + "' and MaliPeyment.TarafhesabName='" + Tarafhesab.Text + "' ", connect);
SqlDataAdapter saeed = new SqlDataAdapter(@"select MR.AccCode as [کدطرف حساب],MR.NameBank+'شماره پیگیری:'+MR.Shp+''+MR.babate,MR.Comm AS شرح
,SUM(MR.mony) AS دریافتی
,SUM(MP.Mony) AS پرداختی
,SUM(MR.mony) - SUM(MP.Mony) AS مانده
From
ReciveKoli MR inner join Kolipeyment MP
ON
MR.AccCode = MP.AccCode WHERE MR.TarafhesabName='" + Tarafhesab.Text + "' group by MR.Acccode ", connect);
DataTable tsaeed = new DataTable(); saeed.Fill(tsaeed);

bazikadeh
دوشنبه 19 آبان 1393, 11:46 صبح
کسی هست نحوه join کردن دو یا 3 جدول رو کامل توضیح بده ؟

aslan
دوشنبه 19 آبان 1393, 12:10 عصر
با سلام
من دو تا از جداولمو باهم join کردم این ارورو میده:
125474
اینم کدم:

try
{
connect.Open();
//SqlDataAdapter insert = new SqlDataAdapter(@"select ReciveKoli.mony,MaliPeyment.MonyPeyment,Kolipeymen t.Mony from ReciveKoli inner join MaliPeyment on ReciveKoli.TarafhesabName=MaliPeyment.TarafhesabNa me inner join Kolipeyment on ReciveKoli.TarafhesabName=Kolipeyment.TarafhesabNa me where kolipeyment.TarafhesabName='" + Tarafhesab.Text + "' and MaliPeyment.TarafhesabName='" + Tarafhesab.Text + "' ", connect);
SqlDataAdapter saeed = new SqlDataAdapter(@"select MR.AccCode as [کدطرف حساب],MR.NameBank+'شماره پیگیری:'+MR.Shp+''+MR.babate,MR.Comm AS شرح
,SUM(MR.mony) AS دریافتی
,SUM(MP.Mony) AS پرداختی
,SUM(MR.mony) - SUM(MP.Mony) AS مانده
From
ReciveKoli MR inner join Kolipeyment MP
ON
MR.AccCode = MP.AccCode WHERE MR.TarafhesabName='" + Tarafhesab.Text + "' group by MR.Acccode ", connect);
DataTable tsaeed = new DataTable(); saeed.Fill(tsaeed);
سلام
اسامی فیلدهایی که در متن خطا ذکر کرده بایستی بعد از group by بیارین و یا آنها را از جلوی Select حذف کنین .............

نیما حتمی
دوشنبه 19 آبان 1393, 12:15 عصر
سلام
اسامی فیلدهایی که در متن خطا ذکر کرده بایستی بعد از group by بیارین و یا آنها را از جلوی Select حذف کنین .............
اسلان جان این کار به نظرت درسته؟گروه بندی براساس یک فیلد انجم میشه نه 10 فیلد!!!!!!

aslan
دوشنبه 19 آبان 1393, 14:06 عصر
اسلان جان این کار به نظرت درسته؟گروه بندی براساس یک فیلد انجم میشه نه 10 فیلد!!!!!!

سلام
شکل دستوری استفاده از گروپ بای به همون شکلی هست که گفتم... مگر اینکه کوئریتون را عوض کنین ......
یک سوال : فرضا میخواهید (3 رکورد )جمع بدهکار / بستانکار/ مانده کد حساب 001 را بدست بیارید ..... یکی از رکوردها مربوط به بانک ملی و دو رکورد دیگر مربوط به بانک ملت باشد ... خب با کوئری که نوشتین انتظار دارین نام کدوم بانک در نتیجه کوئری نوشته بشه ؟؟؟؟؟

نیما حتمی
دوشنبه 19 آبان 1393, 15:25 عصر
سلام
شکل دستوری استفاده از گروپ بای به همون شکلی هست که گفتم... مگر اینکه کوئریتون را عوض کنین ......
یک سوال : فرضا میخواهید (3 رکورد )جمع بدهکار / بستانکار/ مانده کد حساب 001 را بدست بیارید ..... یکی از رکوردها مربوط به بانک ملی و دو رکورد دیگر مربوط به بانک ملت باشد ... خب با کوئری که نوشتین انتظار دارین نام کدوم بانک در نتیجه کوئری نوشته بشه ؟؟؟؟؟

نه چطور میشه اونوقت جواب ابن سوال شما؟

sajadsobh
دوشنبه 19 آبان 1393, 15:48 عصر
قانون استفاده از GROUP BY همینه! وقتی که ازش استفاده میشه باید هر فیلدی که جزیی از aggregation ها نیست رو در قسمت GROUP BY ذکر کرد.

aslan
دوشنبه 19 آبان 1393, 17:02 عصر
نه چطور میشه اونوقت جواب ابن سوال شما؟

سلام
انتظارم این بود که جواب سوال را شما بدین ..... اگر نمیخواهید جمع بد / بس مربوط به هر بانک مشخص بشه پس باید نام بانک در سلکت نباشه و اگر میخواهید برای هر بانک جداگانه نمایش داده بشه پس باید بر اساس نام بانک هم گروهبندی بشه در غیر اینصورت برای sql مشخص نیست که نام کدوم بانک را نمایش بده و ...... برای سایر فیلدها هم همین موضوع صادق هستش ....
موفق باشید

aslan
دوشنبه 19 آبان 1393, 17:03 عصر
نه چطور میشه اونوقت جواب ابن سوال شما؟

سلام
انتظارم این بود که جواب سوال را شما بدین ..... اگر نمیخواهید جمع بد / بس مربوط به هر بانک مشخص بشه پس باید نام بانک در سلکت نباشه و اگر میخواهید برای هر بانک جداگانه نمایش داده بشه پس باید بر اساس نام بانک هم گروهبندی بشه در غیر اینصورت برای sql مشخص نیست که نام کدوم بانک را نمایش بده و ...... برای سایر فیلدها هم همین موضوع صادق هستش ....
موفق باشید