PDA

View Full Version : سوال: راهنمایی در خصوص نوشتن یک دستور SQL و نمایش نتیجه در DatagridView



reza_devel0per
سه شنبه 24 بهمن 1391, 17:42 عصر
سلام

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

99947

حالا من می خوام توی یک دیتاگرید این فیلدها رو نشون بدم :
کد سرویس، کد مشتری، نام مشتری، تعداد دفعات ارسال پیامک، تعداد دفعات تماس

متاسفانه در نوشتن دستورات SQL تخصص ندارم، اگه ممکنه لطفا راهنمایی بفرمایید.
ممنون

khokhan
سه شنبه 24 بهمن 1391, 18:09 عصر
یک کوری با " innerjoin"

reza_devel0per
سه شنبه 24 بهمن 1391, 18:31 عصر
میشه بیشتر راهنمایی بفرمایید؟ اگه ممکنه کد SQL ش رو ميشه بنویسید؟

khokhan
سه شنبه 24 بهمن 1391, 18:42 عصر
میشه بیشتر راهنمایی بفرمایید؟ اگه ممکنه کد SQL ش رو ميشه بنویسید؟

یه کوئری شبیه این می نویسی که دو سه تا ستون از یه جدول و دو یا چن تا ستون از یه جدول دیگه رو همزمان می خونه و داخل یه دیتا گرید نشون می ده

اینطوری :


SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name

reza_devel0per
سه شنبه 24 بهمن 1391, 19:53 عصر
نتونستم :(
اون دو تا ستون آخر count هستنـا...

reza_devel0per
سه شنبه 24 بهمن 1391, 20:27 عصر
inner join رو بلد نيستم، منتهی این کد رو نوشتم اما کار نکرد :(

select Tb_Service.code_service, Tb_Customer.code_customer, Tb_Customer.name, COUNT(Tb_Call.ID)as cnt1, COUNT(Tb_SMS.ID) as cnt2
from Tb_Service, Tb_Customer, Tb_Call, Tb_SMS
where
Tb_Customer.code_customer=Tb_Service.code_customer and Tb_Call.code_service=Tb_Service.code_service and Tb_SMS.code_service=Tb_Service.code_service
group by Tb_Service.code_service, Tb_Customer.code_customer, Tb_Customer.name

danialafshari
سه شنبه 24 بهمن 1391, 20:32 عصر
فکر می کنم اگر دیتابیس رو قرار بدی یا یه شبه دیتابیست قرار بدی زودتر به جواب برسی

reza_devel0per
سه شنبه 24 بهمن 1391, 21:09 عصر
فکر می کنم اگر دیتابیس رو قرار بدی یا یه شبه دیتابیست قرار بدی زودتر به جواب برسی
اون تصویری که آماده کردم در پست اول کافی نیست؟
من SQL 2008 R2 دارم، اگر از این نسخه یا نسخه 2012 استفاده میکنید، فایل دیتابیس رو براتون ارسال کنم.

uniqueboy_ara
سه شنبه 24 بهمن 1391, 22:28 عصر
شما از View استفاده کن
تمام مشکلاتت حل میشه

aslan
سه شنبه 24 بهمن 1391, 22:48 عصر
سلام
اینهم یک روش که احتمالا روش زیاد بهینه ای نیست !


Select C.Code_Customer,Name,S.Code_Service,T_SMS,T_TAMAS From Tb_Customers C
INNER JOIN TB_Service S On C.Code_Customer=S.Code_Customer
INNER JOIN (SELECT Code_Service, COUNT(*) AS T_SMS
FROM Tb_SMS
GROUP BY Code_Service) ss On SS.Code_Service=S.Code_Service
INNER JOIN (SELECT Code_Service, COUNT(*) AS T_TAMAS
FROM Tb_CALL
GROUP BY Code_Service) MM On MM.Code_Service=S.Code_Service

reza_devel0per
سه شنبه 24 بهمن 1391, 23:01 عصر
اینهم یک روش که احتمالا روش زیاد بهینه ای نیست !

واقعاً ممنونم، درست عمل کرد، ولی فقط یک رکورد رو نشون میده! :(
لطفا کمی در این مورد که چرا بهینه نیست، توضیح بدید...

reza_devel0per
دوشنبه 30 بهمن 1391, 02:00 صبح
به نظرتو اگه فیلدهای کد سرویس، کد مشتری و نام مشتری رو با یک دستور SQL بدست بیارم و با یک For تعداد پیامک ها و تماس ها رو برای هر رکورد بدست بیارم، کاره غیرمنطقی ای هستش؟!
برای اینکه فرم هم عادی لود بشه، حلقه رو داخل یک Thread هم ميتونم بنويسمز نه؟!

reza_devel0per
دوشنبه 30 بهمن 1391, 17:32 عصر
دوست ندارم اینجا پست spam بزارم! ولی ناچارم!
دوستان لطفا منو راهنمایی بفرمایید

aslan
دوشنبه 30 بهمن 1391, 23:44 عصر
واقعاً ممنونم، درست عمل کرد، ولی فقط یک رکورد رو نشون میده! :(
لطفا کمی در این مورد که چرا بهینه نیست، توضیح بدید...

سلام
دوست عزیز
Query پست 10 را من خودم تست کردم و جواب لازمو گرفتم . رکوردهای لازمو برمیگردونه . اگر برای شما فقط یک رکورد برمیگردونه میتونه مشکل از جای دیگه باشه و یا فقط یک رکوردتون شرایط لازم و داره و ........
در مورد بهینه نبودنش هم فکر کردم شاید سایر دوستان Query بهتری ارائه بدن که سلکت تو سلکت نباشه و .........