ورود

View Full Version : سوال: نوشتن يك query بر روي سه جدول



سيد مجتبي هاشمي
یک شنبه 27 شهریور 1390, 12:35 عصر
75435 75436

با سلام.
دوستان با توجه به تصاوير ضميمه شده، ميخوام يه Query بنويسم كه از جدول tbl_wl فيلدهاي name و fname ، از جدول tbl_wl_value فيلد sum(value) و از جدول tbl_hesab_male فيلد sum(price) رو برگردونه و در آخر هم اين دوتا فيلد sum رو از هم كم بكنه و تمام اين نتايج رو تو يه DBGrid كه در تصوير ميبينيد نشون بده.

لطفا راهنمايي كنيد چيكار بايد بكنم.

سيد مجتبي هاشمي
دوشنبه 28 شهریور 1390, 10:32 صبح
دوستان كسي نيست جواب بده؟

:متفکر::متفکر::متفکر::متفکر:: تفکر::متفکر::متفکر::متفکر::م فکر::متفکر::متفکر::متفکر::مت کر::متفکر::متفکر::متفکر::متف ر::متفکر::متفکر::متفکر::متفک :

سعید صابری
دوشنبه 28 شهریور 1390, 12:48 عصر
با SELECT های تو در تو
مثل زیر


SELECT id, (SELECT NAM,FNAME FROM TABLE0 WHERE field = xx),(select sum(x) from table1 where field =xx),(select filed from table1) -(select field from table2 ) from maintable

سيد مجتبي هاشمي
سه شنبه 29 شهریور 1390, 09:54 صبح
با SELECT های تو در تو
مثل زیر


SELECT id, (SELECT NAM,FNAME FROM TABLE0 WHERE field = xx),(select sum(x) from table1 where field =xx),(select filed from table1) -(select field from table2 ) from maintable


با تشكر از راهنماييتون. كد رو به صورت زير نوشتم اما موندم چه شرطي بنويسم كه اين دوتا مجموع رو براي هر فرد جداگانه حساب بكنه. همينطور name و fname .


ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select name , fname from tbl_wl where ');
ADOQuery1.SQL.Add(',(select sum(value) as s1 from tbl_wl_value where year=:x)');
ADOQuery1.SQL.Add(',(select sum(price) as s2 from tbl_hesab_male where date like'+ QuotedStr(ComboBox1.Text + '%'));
ADOQuery1.Parameters.ParamByName('x').Value := ComboBox1.Text;
ADOQuery1.Open;


در ضمن اين دوتا مجموع چطور بايد از هم كم بشن تا بتونيم به عنوان يه فيلد جداگانه ازش استفاده كنيم.

سعید صابری
سه شنبه 29 شهریور 1390, 15:37 عصر
اگه به کدهای که پست 3 نوشتم دقت کنید هر کدام از select ها (که میشه یک فیلد) یک شرط داره در اینصورت شما برای هر قسمت میتونید یک شرط بنویسید و اگر شرط برای همه فیلدها مشترک است(مثلا همه تیبل ها فیلدها ID دارند) از پارامتر استفاده کنید.برای مثال تمام شرطها میشه(where id =:A) . اما برای تفریق نیز بالا نوشتم براتون.
برای تفریق یا جمع و....(فقط کد قسمت تفریق)


select ...,(select sum(field) from table1 where id= x) -(select sum(field) from table2 ) As Taf,...

سيد مجتبي هاشمي
چهارشنبه 30 شهریور 1390, 08:10 صبح
دستتون درد نكنه. اين قسمت رو از پستهاي 3 و 5 متوجه شدم.

اما شرطش يه جوريه. اون هم اينكه:
ميخوام اين اطلاعات رو براي افرادي نشون بده كه در جدول tbl_wl_value براشون اعتبار ثبت شده. حالا براي اين حالت چه شرطي بايد بنويسم و آيا ترتيب نوشتن دستورات select مهم هست يا نه؟ (فيلد مشترك بين هر سه جدول هم فيلد shair_number هست.)

SYNDROME
چهارشنبه 30 شهریور 1390, 14:09 عصر
با سلام
از این دستور استفاده کنید.


Select name,fname ,Sum(Value),sum(price)
From Tbl_wl T1
Inner Join Tbl_wl_value T2
On T1.ID = T2.Shair_Number
Inner Join Tbl_hesab_male T3
On T1.ID = T3.Shair_Number

باید رکورد در هر سه جدول وجود داشته باشد.
موفق باشید