View Full Version : سوال در مورد join کردن دو جدول و بدست آوردن گزارشی خاص
نیما حتمی
دوشنبه 27 آبان 1392, 18:51 عصر
با سلام
دوستان من 2 جدول دارم که یکی malirecieveودیگری malipeyment نام دارد.کاربر میاد برای هر قرارداد مبلغ مورد نظرشو دریافت و یا پرداخت میکنه.حالا سوال من اینه که یه گزارشی از این دو جدول میخوام که چهار ستون داشته باشه
112980
فیلد مشترک این دو جدول shgh هست که خودم کدشو نوشتم ولی چیزی که نشون میده درست نیست
ماهیت گزارش نمایش کل دریافتی ها و پرداختی های هر قرارداد به اضافه مانده آن میباشد یعنی سیستم بیاد بگه قرارداد مثلا 2323 a ریال دریافتی داشته و b ریال پرداختی و c ریال مانده هنوز. حالا سیستم باید بیاد مبلغ کل هم از customer دربیاره و این مبالغ هم از هم کم کنه بزاره تو مانده.بچه ها یعنی هر کی جواب بده واقعا مدیونشم
حالا این سوال من هست که از اساتید درخواست دارم کمک کنن
iebu12
دوشنبه 27 آبان 1392, 19:27 عصر
با سلام
اولا شما دو تا مانده نوشتی یکی مانده قرارداد و یکی مانده مشتری. حالا شما دقیقا کدوم یکی رو می خواید؟ این تصویری که شما گذاشتی برای باقیمانده قرارداد بدرد میخوره.
به هر حال اگه فایل دیتابیس یا نرم افزارت رو بزاری شاید بتونم کمکت کنم. هرچند با این اطلاعاتی که دادی فکر نکنم کسی بتونه کمکت کنه.
Reza_Yarahmadi
سه شنبه 28 آبان 1392, 10:09 صبح
با یه Join و یه Group By میتونید به خواسته خودتون برسید. چیزی شبیه کد زیر
Select
MR.ShGh
,SUM(MR.RecievedAmount) AS TotalRecievedAmount
,SUM(MP.PeymentedAmount) AS TotalPeymentedAmount
,SUM(MR.RecievedAmount) - SUM(MP.PeymentedAmount) AS Remainder
From
malirecieve MR Full Outer Join malipeyment MP
ON
MR.ShGh = MP.ShGh
Group BY
MR.ShGh
نیما حتمی
چهارشنبه 29 آبان 1392, 09:42 صبح
سلام به استاد خودم آقا رضا
ممنونم که پاسخ منو دادی.رضا جان کجای این دستور شما از where استفاده کنم؟اگه ممکنه بگین
Reza_Yarahmadi
چهارشنبه 29 آبان 1392, 12:19 عصر
کجای این دستور شما از where استفاده کنم؟
بستگی به شرط شما داره؛ بطور مثال
اگه میخواید اطلاعات اشخاصی رو داشته باشید که ساکن شهر خاصی هستند، قبل از Group By شرطتون رو بیارید
اگه اطلاعات افرادی که دارای بیش از 5 گردش دارند باید از Having استفاده کنید.
اگر هم میخواید روی نتیجه این کوئری شرط خاصی بذارید یا از select تودرتو استفاده کنید یا CTE ...
نیما حتمی
چهارشنبه 29 آبان 1392, 16:29 عصر
آقا رضا یه سوال داشتم
من یه join بین سه جدولم بستم و همچنین اومدم از جستجوی ترکیبی استفاده کردم به این شکل:
string conditions = "1=1";
if (checkBox1.Checked == true)
{
conditions += "and MP.namebank='" + NameBank.Text + "' ";
}
else
{
checkBox1.Checked = false;
}
if (checkBox4.Checked == true)
{
conditions += "and SP.dateharekat='" + DateHarekat.Value.FarsiSelectedDate + "' ";
}
else
{
checkBox4.Checked = false;
}
حالا مشکلم اینه که تو این join دی که بستم به where نیاز دارم در صورتی که اینطوری دستور سلکتم تموم میشه و جایی واسه group بستن ندارم
SqlDataAdapter saeed = new SqlDataAdapter(@"select MR.ShGh AS شرح
,MR.FamilyM AS [نام مسافر]
,SP.dateharekat AS [تاریخ حرکت]
,SP.count AS تعداد
,MP.Malirecieve AS مبلغ
,MR.TypeRecieve AS [نوع دریافتی]
,MP.ShPeygiri AS [ش پیگیری]
,MR.Nametor AS [نام تور]
,MR.tarafhesab AS [طرف حساب]
From
malirecieve MR Full Outer Join cardtocard MP
ON
MR.ShGh = MP.ShGh Full Outer Join customer SP ON MR.shgh=SP.shgh WHERE "+conditions , connect);
چطوری از where استفاده کنم که بتونم از این شروط ترکیبی هم استفاده کنم؟
Reza_Yarahmadi
شنبه 02 آذر 1392, 17:25 عصر
"... WHERE " + conditions + " Group By ..."
نیما حتمی
دوشنبه 04 آذر 1392, 19:34 عصر
رضا جان این کارو کردم جواب نمیده اررور میده:
113219
این هم کدم:
SqlDataAdapter saeed = new SqlDataAdapter(@"select MR.ShGh AS شرح
,MR.FamilyM AS [نام مسافر]
,SP.dateharekat AS [تاریخ حرکت]
,MR.DateRecieve as [تاریخ دریافت]
,SP.count AS تعداد
,MP.Malirecieve AS مبلغ
,MR.TypeRecieve AS [نوع دریافتی]
,MP.ShPeygiri AS [ش پیگیری]
,MR.Nametor AS [نام تور]
,MR.tarafhesab AS [طرف حساب]
From
malirecieve MR Full Outer Join cardtocard MP
ON
MR.ShGh = MP.ShGh Full Outer Join customer SP ON MR.shgh=SP.shgh WHERE " + conditions+"group by MR.shgh" , connect);
Reza_Yarahmadi
سه شنبه 05 آذر 1392, 07:34 صبح
شما فقط میتونید ستونهایی رو در خروجی داشته باشید که توی group by شرکت داده شده اند.
توی دستوری که نوشتید به نظر نماید نیازی به group by باشه. در صورت نیاز به استفاده از group by و داشتن ستونهای اضافی یا باید یک join دیگه بین جدولهای مورد نیاز و نتیجه group by بزنید و یا اینکه توی شرط واکشی از جدولها از نتیجه این group by استفاه کنید(استفاده از دستوراتی مثل Exists)
Select
...
From
...
Where
ShGh in (Select Shgh From malirecieve Group by ShGh)
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.