PDA

View Full Version : کوئری گرفتن از چند جدول



hashemi85sep
چهارشنبه 04 بهمن 1391, 13:01 عصر
سلام دوستان
من سه تا جدول به نام های فروش ، مشتری، پرداختی دارم
که میخوام لیستی از بدهکارام رو بدست بیارم .
جداول من به این صورته :
forush
id . id_moshtari . id_ranande . id_kala . gheymat_n

pardakhti
id . id_moshtari . tarikh_p . nahve_p . meghdar_p .

moshtari
id . name

حالا میخوام لیست بدهکارانم رو بدست بیارم ...
توی کوئری گرفتن مشکل دارم

ممنون میشم اگه کسی راهنمایی کنه ...

محمد سلیم آبادی
چهارشنبه 04 بهمن 1391, 19:37 عصر
نیاز هست به یک نمونه داده از هر سه جدول همراه با خروجی مورد نظر

hashemi85sep
پنج شنبه 05 بهمن 1391, 10:31 صبح
سلام دوست عزیز

محمد سلیم آبادی
پنج شنبه 05 بهمن 1391, 15:09 عصر
چرا فقط تصاویر مربوط به داده ها را ارسال نکردین؟!
خب خروجی مورد نظرتون بر اساس داده هاتون چی هست؟ شما در یک جدول خروجی مورد نظر را نمایش بدین تا دقیق متوجه مساله بشیم. و همچنین لطف کنید پست قبلیتون رو ویرایش کنید و فقط تصویر داده ها باقی بماند.

hashemi85sep
پنج شنبه 05 بهمن 1391, 21:45 عصر
سلام دوست عزیز
تصویر سوم که مربوط به فروش مصالح هست

تصویر اول هم مربوط به پرداختی مشتریانه

لیست بدهکاران به این صورت بدست میاد که هر کس که در جدول فروش کدش ثبت شده ، قیمت نهایی مصالح در جدول فروش با مبلغ پرداختی که در جدول پرداختی هست باید برابری کنه در غیر اینصورت بدهکار محسوب میشه ..
یا اگه اسم یه مشتری در جدول فروش باشه ولی در جدول پرداختی نباشه هم بدهکار به حساب میاد

عکس دوم هم که گذاشتم مربوط به گذارش گیری بر اساس لیسی هست که در عکس موجوده بدست میاد لیس بدهکاران
امیدوارم که منظورم رو درست بیان کرده باشم..:لبخند:

محمد سلیم آبادی
پنج شنبه 05 بهمن 1391, 21:59 عصر
بدست آوردن مشخصات مشتریانی که بدهکارند:
customer نام جدول مشتری
frosh جدول فروش
pardakht جدول پرداخت
customreid کد مشتری
frosh قیمت کل
pardakht مبلغ پرداختی

select *
from customers c
inner join
(
select t.customerID
from (select customerID, sum(pardakhti) as sm
from pardakhti
group by customerID
)d
inner join
(select customerID, sum(forosh) as sn
from forosh
group by customerID
) t on d.customerid = t.customerid and d.sm < t.sm
union all
select customerid
from forosh
where customerid not in
(select customerid from pardakhti)
)t on c.customerid = t.customerid;

hashemi85sep
جمعه 06 بهمن 1391, 09:49 صبح
سلام دوست عزیز

من کد شما استفاده کردم با تغییری که انجام دادین ..
ولی توی sql که کوئری میگیرم این خطا رو میده
Operand data type nvarchar is invalid for sum operator.

نوع دادی رو هم که تغییر میدم به bigint قبول نمیکنه ...
چه کاری باید انجام بدم /؟/
با تشکرر

محمد سلیم آبادی
جمعه 06 بهمن 1391, 12:38 عصر
منظورتون از قبول نمیکنه چیه؟
تا حالا به numeric تبدیلش کردین؟

hashemi85sep
جمعه 06 بهمن 1391, 13:51 عصر
سلام دوست عزیز
عکس مربوط به خطا ها رو گذاشتم

بعد چطوری باید به numeric تبدیل کنم ؟

محمد سلیم آبادی
جمعه 06 بهمن 1391, 14:42 عصر
پیغام خطا میگه در ستون مذکور داده هایی وجود داره که خارج از رنج 0-9 هستند. در نتیجه امکان Convert شدن داده ها وجود نداره. پس شما باید ابتدا کاراکترهای ناخواسته رو حذف کنید سپس سعی در تبدیل نوع به عددی بکنید.

بعد چطوری باید به numeric تبدیل کنم ؟
همونطور که به bigint تبدیل میخواستین بکنین. از طریق design

hashemi85sep
جمعه 06 بهمن 1391, 15:14 عصر
سلام دوست عزیز
هر کاری کردم نشد
دیتا بیسم رو آپلود میکنم براتون اگه میشه ببینید مشکل از کجاست ؟
sql2005
http://up.toca.ir/images/x59nqf89dmlm30j0sxtp.zip

توی جدول فروش هم نوع gheymat_n باید تغییر کنه ...

با تشکر

محمد سلیم آبادی
جمعه 06 بهمن 1391, 16:08 عصر
هر کاری کردم نشد
چه پیغام خطایی صادر میشه؟

qurey زیر را اجرا کنید اگر خروجی داشت باید توسط این تکنیک (http://www.dotnettips.info/post/1187/%D8%AD%D8%B0%D9%81-%D9%86%D9%85%D9%88%D8%AF%D9%86-%DA%A9%D8%A7%D8%B1%D8%A7%DA%A9%D8%AA%D8%B1-%D9%87%D8%A7%DB%8C-%D9%86%D8%A7%D8%AE%D9%88%D8%A7%D8%B3%D8%AA%D9%87-%D8%AA%D9%88%D8%B3%D8%B7-recursive-cte-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84) تمام کاراکترها به غیر از اعداد و ارقام را حذف کنید
select gheymat_n from table_name where gheymat_n like '%[^0-9]%';

چرا برای گرفتن اعداد و ارقام از Data Type رشته ای استفاده کردین؟!

من 2005 ندارم.

hashemi85sep
جمعه 06 بهمن 1391, 16:27 عصر
حل شد دوست عزیز

فقط مبلغ بدهی رو چطوری باید جلوی اسم هر شخص بزنه ؟

محمد سلیم آبادی
شنبه 07 بهمن 1391, 21:59 عصر
این را امتحان کنید:

select t.customerID, t.sm - d.sm as bedehi
from (select customerID, sum(pardakhti) as sm
from pardakhti
group by customerID
)d
inner join
(select customerID, sum(forosh) as sm
from forosh
group by customerID
) t on d.customerid = t.customerid and d.sm < t.sm

union all

select customerid,
(select sum(forosh)
from forosh f
where t.customerid = t.customerid)
from customerid t
where customerid not in
(select customerid from pardakhti)

hashemi85sep
شنبه 07 بهمن 1391, 22:55 عصر
سلام دوست عزیز
ممنون از کمکت ولی نشد
invalid object name pardakhti
این error رو میده ..
هرچی باهاش ور رفتم درست نشد

محمد سلیم آبادی
یک شنبه 08 بهمن 1391, 06:37 صبح
من بدون توجه به اسامی (ستون ها و جداول) ارائه شده توسط شما query را نوشتم. شما باید نام ها را ویرایش کنید