ورود

View Full Version : ارتباط بین دو جدول خاص



safa55
دوشنبه 04 اسفند 1393, 19:08 عصر
دوستان ، من دو تا جدول دارم که یکی شامل مشخصات و دیگری هم جدول بدهی است.
می خواهم بین این دو جدول ارتباط بر قرار کنم.
در جدول اول برای هر رکورد یک کلید دارم. در جدول دوم هم اگر رکوردی (رکورد جدول اول) بدهی ای داشته باشد در این جدول ثبت می شود.
بس ممکن است رکوردی (شخصی)بدهی نداشته باشد. با این حال می خواهم بین این دو جدول ارتباط برقرار کنم.
می خواهم query ای بگیرم که مقدار بدهی هر رکورد(از جدول دوم) را در کنارش نشان دهد. ولی چون بعضی از رکورد ها بدهی ندارند ، جواب نمی دهد. یعنی با ارتباط قرار دادن این دو جدول با یکدیگر ، رکوردهایی که بدهی ندارند را نشان نمی دهد.
به نظرتون چکار می توانم بکنم.؟

SabaSabouhi
دوشنبه 04 اسفند 1393, 19:57 عصر
دوستان ، من دو تا جدول دارم که یکی شامل مشخصات و دیگری هم جدول بدهی است.
می خواهم بین این دو جدول ارتباط بر قرار کنم.
در جدول اول برای هر رکورد یک کلید دارم. در جدول دوم هم اگر رکوردی (رکورد جدول اول) بدهی ای داشته باشد در این جدول ثبت می شود.
بس ممکن است رکوردی (شخصی)بدهی نداشته باشد. با این حال می خواهم بین این دو جدول ارتباط برقرار کنم.
می خواهم query ای بگیرم که مقدار بدهی هر رکورد(از جدول دوم) را در کنارش نشان دهد. ولی چون بعضی از رکورد ها بدهی ندارند ، جواب نمی دهد. یعنی با ارتباط قرار دادن این دو جدول با یکدیگر ، رکوردهایی که بدهی ندارند را نشان نمی دهد.
به نظرتون چکار می توانم بکنم.؟

سلام
تو query بجای join از left outer join استفاده کن.

صبا صبوحی

safa55
سه شنبه 05 اسفند 1393, 12:21 عصر
سلام
تو query بجای join از left outer join استفاده کن.

صبا صبوحی
من از این استفاده کردم مشکل ام تا حدودی حل شد ولی وقتی مثلا بدهی شخصی بیش از یک رکورد باشه جمع نمی کنه؟ از sum استفاده کردم ولی نشد. در کل من می خواهم برای هر رکورد بدهی یک درصدی هم اضافه کنم و کل رکورد ها را باهم جمع کنم (می شه مجموع بدهی ها با احتساب جریمه تاخیر) یه همچین چیزی.
خیلی وقت است که با sql کار نمی کنم ، به همین خاطر شاید سوالات ام هم ساده باشد ولی من الان نمی دانم .

SabaSabouhi
سه شنبه 05 اسفند 1393, 13:12 عصر
من از این استفاده کردم مشکل ام تا حدودی حل شد ولی وقتی مثلا بدهی شخصی بیش از یک رکورد باشه جمع نمی کنه؟ از sum استفاده کردم ولی نشد. در کل من می خواهم برای هر رکورد بدهی یک درصدی هم اضافه کنم و کل رکورد ها را باهم جمع کنم (می شه مجموع بدهی ها با احتساب جریمه تاخیر) یه همچین چیزی.
خیلی وقت است که با sql کار نمی کنم ، به همین خاطر شاید سوالات ام هم ساده باشد ولی من الان نمی دانم .

سلام
بله، سوال‌ها خیلی ساده هستن. من چند تا نکته می‌نویسم که احتمالاً به دردت بخوره.
1. وقتی Left outer join داری، ممکنه مقدار ستون‌های اون جدول Null باشه، و هنگام عملیات ریاضی همه چیز رو Null می‌کنه برای جلوگیری از ‌IsNull استفاده کن


SELECT A.Col1, ISNULL( B.Col2, 0 ) as MyAlias

2. برای حالتی که بیش از یک رکورد وجود داره از Group by استفاده کنی و ستون‌هایی که در Group by قرار ندارن رو با یکی از AgrFunc ها جمع بزن
مثل Sum, Max, Min, Avg, Count
3. مشکلی برای اضافه کردن درصد نداری، محاسبه رو انجام بده و یک اسم بهش بده ( اسم ستون مجازی )


SELECT Value1, ( Value2 * 105 / 100 ) + 150 as MyVirtualColumn1





صبا صبوحی

safa55
سه شنبه 05 اسفند 1393, 13:34 عصر
مرسی بابت توجه.
تغییری ندیدم.
ببینید من یک view دارم که مشخصات هر یک از مشتری ها رو نشون می ده و یک جدول هم که بدهی هاشون رو نشون می ده دارم. فرض کنید یک مشتری چند رکورد بدهی داره.
حالا من می خوام که کل بدهی های ثبت شده هر شخص باهم جمع بشه و کنار سایر field های مشخصات مشتری نشون داده بشه. ولی این کار نمی شه !!!
مشکل من این است که جمع نمی کنه. به تعداد رکوردهای بدهی هر کس در view هم به همان تعداد رکورد نشون می ده. یکی نمی کنه.
اینطوری نوشتم.

select * az degar table ha , sum(mablag_bedehi) as bedehi from ..... left outer join dbo.bedehi on bedehi.id=dbo.table1.id

SabaSabouhi
سه شنبه 05 اسفند 1393, 15:05 عصر
مرسی بابت توجه.
تغییری ندیدم.
ببینید من یک view دارم که مشخصات هر یک از مشتری ها رو نشون می ده و یک جدول هم که بدهی هاشون رو نشون می ده دارم. فرض کنید یک مشتری چند رکورد بدهی داره.
حالا من می خوام که کل بدهی های ثبت شده هر شخص باهم جمع بشه و کنار سایر field های مشخصات مشتری نشون داده بشه. ولی این کار نمی شه !!!
مشکل من این است که جمع نمی کنه. به تعداد رکوردهای بدهی هر کس در view هم به همان تعداد رکورد نشون می ده. یکی نمی کنه.
اینطوری نوشتم.

select * az degar table ha , sum(mablag_bedehi) as bedehi from ..... left outer join dbo.bedehi on bedehi.id=dbo.table1.id

سلام
چطوری؟ فکر می‌کنم یادت رفته کپی کنی. . .
البته جواب سوالت یه Group by ساده هست.

صبا صبوحی

safa55
سه شنبه 05 اسفند 1393, 19:03 عصر
سلام
چطوری؟ فکر می‌کنم یادت رفته کپی کنی. . .
البته جواب سوالت یه Group by ساده هست.

صبا صبوحی

استفاده کرده بودم ، مرسی مشکلم حل شد یکی از موارد group by اضافه بود به همین خاطر بود.