-
استخراج چند فیلد از چند جدول
با سلام
بنده میخوام اطلاعات 3 تا جدول رو داخل یک گرید نمایش بدم
جدول 1 (دانشجو) نام و نام خانوادگی و ...
جدول 2 (بدهی ها) جمع بدهی
جدول 3 (پرداختی ها)جمع پرداختی ها
و در آخر بصورت زیر قابل نمایش باشه.
توجه داشته باشید که مقادیر جمع بدهی و پرداختی در جدول وجود ندارد و باید از دستور Sum استفاده شود.
https://barnamenevis.org/attachment.p...8&d=1415811831
ممنون میشم راهنمایی کنید
-
نقل قول: استخراج چند فیلد از چند جدول
یه چیزی تو این مایه ها امیدوارم جواب بده:
select a,name,a.mell,a.code,sum(b.bedehi),sum(c.pardakhti ) from daneshju a join bedehi b on a.id=b.daneshjuid join pardakhti c on a.id=c.daneshjuid
-
نقل قول: استخراج چند فیلد از چند جدول
فکر کنم این جواب بده. البته با این جداولی که شما طرح کردید:
SELECT Daneshjoo.ID, Daneshjoo.Name, Daneshjoo.Code, SUM(Bedehi.Mablagh) as Bedehi, SUM(Pardakhti.Mablagh) as Pardakhti
FROM Daneshjoo INNER JOIN Bedehi on Daneshjoo.ID = Bedehi.ID INNER JOIN Pardakhti on Daneshjoo.ID = Pardakhti.ID
GROUP BY Daneshjoo.ID, Daneshjoo.Name, Daneshjoo.CodeMelli
ORDER BY ID
-
1 ضمیمه
نقل قول: استخراج چند فیلد از چند جدول
با تشکر از لطف شما دوستان
ببینید من کد رو به اینصورت برای خودم تغییر دادم
کد HTML:
SELECT students.ID, students.fName, students.lName, students.National_Num, students.stunum, SUM(Debts.price) as Bedehi, SUM(Receipts.price) as Pardakhti
FROM students INNER JOIN Debts on students.ID = Debts.student_id INNER JOIN Receipts on students.ID = Receipts.student_id
اما با این اخطار مواجه میشم
ضمیمه 125595
مشکل کجاس؟؟؟؟؟
درضمن دیتا بیسم اکسس است .
ممنون
-
نقل قول: استخراج چند فیلد از چند جدول
شما واسه جداول Debts و Receipts کلید خارجی تعریف کردین؟
بعدشم وقتی که توابع aggregate (مثل SUM) رو بکار می برید باید از دستور Group By استفاده کنید.
-
نقل قول: استخراج چند فیلد از چند جدول
نقل قول:
نوشته شده توسط
sajadsobh
شما واسه جداول Debts و Receipts کلید خارجی تعریف کردین؟
بعدشم وقتی که توابع aggregate (مثل SUM) رو بکار می برید باید از دستور Group By استفاده کنید.
همین فیلد student_id در جداول Debts و Receipts کلید خارجی هستند دیگه
دستور
Group By
رو هم اضافه کردم باز هم همین اخطار رو میده
دلیل اینکه باید از دستور
Group By
استفاده کنم چیه؟؟؟
ممنون:قلب:
-
نقل قول: استخراج چند فیلد از چند جدول
باید بنویسید:
group by students.ID, students.fName, students.lName, students.National_Num, students.stunum
همینکار رو کردید؟
-
نقل قول: استخراج چند فیلد از چند جدول
شما خودتون یکم فکر کنید! تابع SUM رو نوشتید که چی رو جمع کنه؟
Group By میاد رکورد های فیلدتون رو براساس اونچه که جلوش قرار میدید دسته بندی میکنه و بعد تابع sum رو اعمال میکنه. یعنی اول دسته بندی رکوردها براساس ID دانشجوها انجام میشه و بعد جمع بدهی دانشجوها اعمال میشه. میشه گفت هر مقدار که در ستون sum قرار میگیره جمع مثلاً بدهی های دانشجویی هست که IDش فلان مقداره!!
-
1 ضمیمه
نقل قول: استخراج چند فیلد از چند جدول
نقل قول:
نوشته شده توسط
sajadsobh
باید بنویسید:
group by students.ID, students.fName, students.lName, students.National_Num, students.stunum
همینکار رو کردید؟
بله دوست من همینو نوشتم
SELECT students.ID, students.fName, students.lName, SUM(Receipts.price) as Padakhti, SUM(Debts.price) as Bedehi
FROM students INNER JOIN Debts on students.id = Debts.student_id INNER JOIN Receipts on students.id = Receipts.student_id
GROUP BY students.ID, students.fName, students.lName, students.National_Num, students.stunum
ORDER BY ID
این هم ریلیشن اکسسم
ضمیمه 125600
-
نقل قول: استخراج چند فیلد از چند جدول
وقتی به این دستور تغییرش میدم خروجی داره و مشکلی نداره
SELECT students.ID, students.fName, students.lName, SUM(Debts.price) as Bedehi
FROM students INNER JOIN Debts on students.id = Debts.student_id
GROUP BY students.ID, students.fName, students.lName, students.National_Num, students.stunum
اما دیگه جمع پرداختی ها رو ندارم
-
نقل قول: استخراج چند فیلد از چند جدول
به جای INNER JOIN از LEFT OUTER JOIN ببینین جواب میده؟!
-
نقل قول: استخراج چند فیلد از چند جدول
از پرانتز استفاده کنین بینین با INNER JOIN جواب میده؟
SELECT students.ID, students.fName, students.lName, SUM(Receipts.price) as Padakhti, SUM(Debts.price) as Bedehi
FROM (students INNER JOIN Debts on students.id = Debts.student_id) INNER JOIN Receipts on students.id = Receipts.student_id
GROUP BY students.ID, students.fName, students.lName, students.National_Num, students.stunum
ORDER BY ID
-
نقل قول: استخراج چند فیلد از چند جدول
ن متاسفانه :( باز هم نشد :(
چه احتمالاتی هس که این مشکل بوجود میاد؟؟
به فیلد های دیتا بیس ربطی نداره؟؟؟
-
1 ضمیمه
نقل قول: استخراج چند فیلد از چند جدول
نقل قول:
نوشته شده توسط
sajadsobh
از پرانتز استفاده کنین بینین با INNER JOIN جواب میده؟
SELECT students.ID, students.fName, students.lName, SUM(Receipts.price) as Padakhti, SUM(Debts.price) as Bedehi
FROM (students INNER JOIN Debts on students.id = Debts.student_id) INNER JOIN Receipts on students.id = Receipts.student_id
GROUP BY students.ID, students.fName, students.lName, students.National_Num, students.stunum
ORDER BY ID
مرررررررررسی درست شد :) :تشویق:
چه نکته جالبی بود :متفکر: فکر نمیکردم پردانتز توی دستورات SQl اینقدر تاثیر گذار باشه
واسه قسمت ORDERBYID این اخطار رو میداد
ضمیمه 125606
که کلا پاکش کردم درست شد
واقعا ممنونم :)
-
نقل قول: استخراج چند فیلد از چند جدول
توی اکسس اینجور اشکالات هست وگرنه توی sql server من امتحان کردم این مشکل نبود که خدا رو شکر با پرانتز حل شد. خب این الان منظورش اینه که فیلد ID در چند جدول دارید و باید مشخص بشه که منظور شما چیه. باید از ORDER BY Students.ID استفاده کنین.
-
نقل قول: استخراج چند فیلد از چند جدول
خیلی خیلی ممنون از لطفتون :لبخندساده:
فقط یک مورد رو متوجه شدم، اینکه اگه دانشجو پرداختی نداشته باشه یعنی در جدول پرداختی ها سطری با ID یکسان دو جدول دیگه پیدا نکنه کلا نمایشش نمیده
من میخوام اگه هیچ پرداختی نداشت اطلاعات و بدهی رو نمایش بده و پرداختی رو صفر قرار بده
-
نقل قول: استخراج چند فیلد از چند جدول
خواهش میکنم.
به جای INNER JOIN از LEFT OUTER JOIN استفاده کنین. اینجوری اگه پرداختی یا بدهی هم نداشته باشن مقدار NULL برمیگردونه.
-
1 ضمیمه
نقل قول: استخراج چند فیلد از چند جدول
ممنون از لطفتون :قلب:
یک مشکل دیگه پیش اود باز :ناراحت:
موقعی که یک دانشجو بعنوان مثال 3 بدهی با عنوان متفاوت داره و با دستور بالا جمع اونها محاسبه میشه و بعد جمع پرداختی ها رو هم محاسبه میکنه و پرداختی های آن یکی میباشد
میاد به تعداد بدهی ها این مقدار رو دوباره جمع میزنه
یعنی مقدار پرداختی 3 برابر میشه.
* اینم مقادیر جداول
Debts |
ID |
student_id |
title |
debt_date |
price |
2 |
40 |
شهریه ثابت |
1393/07/01 |
$3,900,000.00 |
3 |
40 |
سرانه فرهنگی |
1393/07/01 |
$350,000.00 |
4 |
40 |
15% حق نظارت |
1393/07/01 |
$585,000.00 |
5 |
40 |
شهریه متغیر |
1393/07/01 |
$5,400,000.00 |
6 |
41 |
شهریه ثابت |
1393/08/21 |
$3,900,000.00 |
7 |
41 |
سرانه فرهنگی |
1393/07/01 |
$350,000.00 |
8 |
41 |
15% حق نظارت |
1393/08/21 |
$585,000.00 |
ID |
student_id |
debt_id |
num |
type |
date_Received |
price |
for |
1 |
40 |
4 |
45645 |
فیش |
1393/08/19 |
$585,000.00 |
15% حق نظارت |
و خروجی اون به این صورت است
ضمیمه 125620
-
نقل قول: استخراج چند فیلد از چند جدول
آقا الان من به این پی بردم که پیوند بین جداول اشتباه ست. الان تازه فهمیدم شما جی میخواین.
-
نقل قول: استخراج چند فیلد از چند جدول
من یه دستور تودر تو می نویسم ببین جواب میده؟
اگه جواب داد و متوجه نشدین بگین توضیح بدم.
SELECT t1.ID, t1.name, SUM(t1.Bedehi) as Bedehi, SUM(t2.Padakhti) as Padakhti
FROM (
SELECT students.ID, students.name, SUM(Debts.price) as Bedehi
FROM students LEFT JOIN Debts on students.ID = Debts.student_id
GROUP BY students.ID, students.name) as t1
LEFT JOIN
(SELECT students.ID, students.name, SUM(Receipts.price) as Padakhti
FROM students LEFT JOIN Receipts on students.ID = Receipts.student_id
GROUP BY students.ID, students.name) as t2
on t1.ID = t2.ID
GROUP BY t1.ID, t1.name
ORDER BY t1.ID
-
نقل قول: استخراج چند فیلد از چند جدول
نقل قول:
نوشته شده توسط
sajadsobh
من یه دستور تودر تو می نویسم ببین جواب میده؟
اگه جواب داد و متوجه نشدین بگین توضیح بدم.
SELECT t1.ID, t1.name, SUM(t1.Bedehi) as Bedehi, SUM(t2.Padakhti) as Padakhti
FROM (
SELECT students.ID, students.name, SUM(Debts.price) as Bedehi
FROM students LEFT JOIN Debts on students.ID = Debts.student_id
GROUP BY students.ID, students.name) as t1
LEFT JOIN
(SELECT students.ID, students.name, SUM(Receipts.price) as Padakhti
FROM students LEFT JOIN Receipts on students.ID = Receipts.student_id
GROUP BY students.ID, students.name) as t2
on t1.ID = t2.ID
GROUP BY t1.ID, t1.name
ORDER BY t1.ID
واقعا ممنونم بابت پیگیریتون
ببینید من کد رو به این صورت تغییر دادم
SELECT students.ID, students.FName, students.LName,SUM(Debts.price) as Bedehi, SUM(Receipts.price) as Pardakhti
FROM ( SELECT students.ID, students.FName, SUM(Debts.price) as Bedehi
FROM students LEFT JOIN Debts on students.ID = Debts.student_id
GROUP BY students.ID, students.FName) as students
LEFT JOIN
(SELECT students.ID, students.FName, SUM(Receipts.price) as Padakhti
FROM students LEFT JOIN Receipts on students.ID = Receipts.student_id
GROUP BY students.ID, students.FName) as Debts
on students.ID, = Debts.student_id
GROUP BY students.ID, students.FName
ORDER BY students.ID
حالا نمیدونم درسته یا نه
این اخطار رو داد
Syntax error in FROM clause
-
نقل قول: استخراج چند فیلد از چند جدول
students.ID, students.FName, students.LName
شما باید این فیلدها رو توی همه Selectها بیارید. در آخر جلوی همه Group BYها هم بیارید.
ولی احتمالاً کوئری های ساده تر از این میشه فکر کنم ایجاد کرد یکم کار کنین خودتون دستتون میاد.
شما الان students.LName رو از کجای این دستور میخواین در بیارین که؟! :متفکر:
-
1 ضمیمه
نقل قول: استخراج چند فیلد از چند جدول
نقل قول:
نوشته شده توسط
sajadsobh
students.ID, students.FName, students.LName
شما باید این فیلدها رو توی همه Selectها بیارید. در آخر جلوی همه Group BYها هم بیارید.
ولی احتمالاً کوئری های ساده تر از این میشه فکر کنم ایجاد کرد یکم کار کنین خودتون دستتون میاد.
شما الان students.LName رو از کجای این دستور میخواین در بیارین که؟! :متفکر:
دوست من ببینید
متاسفانه من کد رو کامل متوجه نشدم که توش تغییر بدم و به جواب برسم
تغییر میدم ولی آگاهانه نیست و مطمعنا به جواب هم نمیرسم
حالا ازتون درخواست دارم که یه مقدار درمورد کاری که داریم میکنیم توضیح بدید و بگید قسمت های مختلف این کد داره چیکار میکنه تا بتونم خودم روش تغییرات بدم تا به جواب برسم
البته لطف میکنید اگه این زحمت رو بکشید
اینم آخرین تغییر من که نمیدونم دارم درست پیش میرم یا نه
SELECT students.ID, students.FName, students.LName, SUM(Debts.price) as Bedehi, SUM(Receipts.price) as PardakhtiFROM ( SELECT students.ID, students.FName, students.LName, SUM(Debts.price) as BedehiFROM students LEFT JOIN Debts on students.ID = Debts.student_idGROUP BY students.ID, students.FName, students.LName) as students LEFT JOIN( SELECT students.ID, students.FName, students.LName, SUM(Receipts.price) as PadakhtiFROM students LEFT JOIN Receipts on students.ID = Receipts.student_idGROUP BY students.ID, students.FName, students.LName) as Debtson students.ID = Debts.student_idGROUP BY students.ID, students.FName, students.LNameORDER BY students.ID
اینم اخطاری که به این کد میده
ضمیمه 125733
-
3 ضمیمه
نقل قول: استخراج چند فیلد از چند جدول
خب ببینید اون روشی که اول گفتم و شما بکار بردید اینطور بود که وقتی شما پیوند بین جداول بدهی و دانشجو رو انجام میدادید بعدش میومد با جدول پرداختی پیوند تشکیل میداد که در اینصورت هر رکورد حاصل از پیوند اول با جدول سوم ادغام میشد واسه همون هر پرداختی چند بار نشون داده میشد و در جمع مشکل ایجاد میکرد.
من اومدم توی روش دوم دو تا پیوند جدا رو در نظر گرفتم. یکی پیوند بین جدول دانشجو و بدهی و دومی پیوند بین جدول دانشجو و پرداختی. حالا باید این دو جدول جدا رو که جداگانه پیوند دادیم بوسیله یه پیوند دیگه که نقطه مشترکشون ID دانشجو هست بهم ربط بدیم. البته این روشی هست که من استفاده کردم و شاید یکم گیج کننده باشده. حالا اگه کس دیگه از دوستان می تونن راهنمایی کنن خوشحال میشیم یاد بگیریم.
برای مثال من اولین پیوند رو که بین جداول دانشجو بدهی است اینجوری دارم:
SELECT Daneshjoo.ID, Daneshjoo.name, SUM(Bedehi.Mablagh) as Bedehi
FROM Daneshjoo LEFT JOIN Bedehi on Daneshjoo.ID = Bedehi.ID
GROUP BY Daneshjoo.ID, Daneshjoo.name
و خروجی این دستور میشه ID و نام دانشجو و جمع بدهی هر دانشجو:
حالا دومین پیوند بین جدول دانشجو پرداختی:
SELECT Daneshjoo.ID, Daneshjoo.name, SUM(Pardakhti.Mablagh) as Padakhti
FROM Daneshjoo LEFT JOIN Pardakhti on Daneshjoo.ID = Pardakhti.ID
GROUP BY Daneshjoo.ID, Daneshjoo.name
و خروجی رو به اینصورت داریم:
حالا این دستور رو ببینید:
SELECT *
FROM (
SELECT Daneshjoo.ID, Daneshjoo.name, SUM(Bedehi.Mablagh) as Bedehi
FROM Daneshjoo LEFT JOIN Bedehi on Daneshjoo.ID = Bedehi.ID
GROUP BY Daneshjoo.ID, Daneshjoo.name) as t1
LEFT JOIN
(SELECT Daneshjoo.ID, Daneshjoo.name, SUM(Pardakhti.Mablagh) as Padakhti
FROM Daneshjoo LEFT JOIN Pardakhti on Daneshjoo.ID = Pardakhti.ID
GROUP BY Daneshjoo.ID, Daneshjoo.name) as t2
on t1.ID = t2.ID
اومدم تمام ستون های حاصل از پیوند این دو تا پیوند جداگانه رو select کردم. t1 جدول حاصل از پیوند اوله و t2 جدول حاصل از پیوند دوم. ببینید نتیجه چی میشه؟!
حالا من باید فقط ستون های ID، نام دانشجو و جمع بدهی ها و پرداختی ها را نشون بدم.
پس میام بجای SELECT * از Select زیر استفاده میکنیم:
SELECT t1.ID, t1.name, Bedehi, Padakhti
FROM (
SELECT Daneshjoo.ID, Daneshjoo.name, SUM(Bedehi.Mablagh) as Bedehi
FROM Daneshjoo LEFT JOIN Bedehi on Daneshjoo.ID = Bedehi.ID
GROUP BY Daneshjoo.ID, Daneshjoo.name) as t1
LEFT JOIN
(SELECT Daneshjoo.ID, Daneshjoo.name, SUM(Pardakhti.Mablagh) as Padakhti
FROM Daneshjoo LEFT JOIN Pardakhti on Daneshjoo.ID = Pardakhti.ID
GROUP BY Daneshjoo.ID, Daneshjoo.name) as t2
on t1.ID = t2.ID
توجه کنین که Bedehi و Pardakhti که در سطر اول این دستور اومدن همون حاصل جمع بدهی ها و پرداختی هاست که ما توی پیوند های داخلی نامدهی کردیم.
SUM(Bedehi.Mablagh) as Bedehi و SUM(Pardakhti.Mablagh) as Padakhti منظورمه!!
الان این باید جواب بده. البته من توی sql چک کردم.
-
نقل قول: استخراج چند فیلد از چند جدول
با استفاده از Common Table Expressions یا CTE می توان نیز انجام داد.
WITH Bedehi1 ( id, Bedehi)
AS
(SELECT ID, Mablagh AS Bedehi11 FROM Bedehi)
,Padakhti1 (ID, Padakhti)
AS
(SELECT ID, Mablagh as Padakhti11 FROM Pardakhti )
,Dnshjoo1(id,name)
as
(select id,name from Daneshjoo)
select Dnshjoo1.ID,Dnshjoo1.name,Bedehi1.Bedehi ,Padakhti1.Padakhti
FROM Bedehi1 INNER JOIN
Padakhti1 ON Bedehi1.id = Padakhti1.ID
INNER JOIN Dnshjoo1 on Bedehi1.id = Dnshjoo1.ID
-
نقل قول: استخراج چند فیلد از چند جدول
TITLE: Microsoft SQL Server Management Studio
------------------------------
An error occurred when attaching the database(s). Click the hyperlink in the Message column for details.
سلام من ویندوزم رو عوض کردم بانک رو هم دی اتچ نکردم بعد نصب دوباره ویندوز با sqlاین ارور رو وقت اتچ کردن میده
-
نقل قول: استخراج چند فیلد از چند جدول
نقل قول:
نوشته شده توسط
myoosef
TITLE: Microsoft SQL Server Management Studio
------------------------------
An error occurred when attaching the database(s). Click the hyperlink in the Message column for details.
سلام من ویندوزم رو عوض کردم بانک رو هم دی اتچ نکردم بعد نصب دوباره ویندوز با sqlاین ارور رو وقت اتچ کردن میده
اخطاری که میده رو بذارید ببینیم چیه مشکل. این که فقط الان میگه دیتابیس اتچ نمیشه و روی لینک زیرش کلیک کنید.
-
نقل قول: استخراج چند فیلد از چند جدول
نقل قول:
نوشته شده توسط
fahimi
با استفاده از Common Table Expressions یا CTE می توان نیز انجام داد.
WITH Bedehi1 ( id, Bedehi)
AS
(SELECT ID, Mablagh AS Bedehi11 FROM Bedehi)
,Padakhti1 (ID, Padakhti)
AS
(SELECT ID, Mablagh as Padakhti11 FROM Pardakhti )
,Dnshjoo1(id,name)
as
(select id,name from Daneshjoo)
select Dnshjoo1.ID,Dnshjoo1.name,Bedehi1.Bedehi ,Padakhti1.Padakhti
FROM Bedehi1 INNER JOIN
Padakhti1 ON Bedehi1.id = Padakhti1.ID
INNER JOIN Dnshjoo1 on Bedehi1.id = Dnshjoo1.ID
ممنون از پاسختون
اما من چیز زیادی ازش متوجه نشدم :گیج: که این مشکل بنده س:افسرده:
در هر صورت من با کد آقا سجاد به نتیجه رسیدم :چشمک: