![]() |
|
حل لمشكل sql هذا؟ - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : حل لمشكل sql هذا؟ (/showthread.php?tid=4031) |
حل لمشكل sql هذا؟ - yassine_hell - 25-03-2012 السلام عليكم عندي مشكلة مع جملة SQL هذه : كود : ADOQuery1.SQL.Text := 'SELECT users.ID_J as['+words[21]+'], '+
'users.name as ['+words[9]+'], '+
'users.lastName as ['+words[10]+'], '+
'users.CIN as ['+words[11]+'], '+
'users.tel as ['+words[12]+'], '+
'users.job as ['+words[13]+'], '+
'users.adr as ['+words[14]+'], '+
'users.email as ['+words[15]+'], '+
'users.JoinDate as ['+words[16]+'], '+
'users.commit as ['+words[17]+'], '+
'users.LastPayDate as ['+Words[18]+'], '+
'Format(sum(pays.amount),"00.00") as ['+Words[20]+'] '+
'FROM users '+
'inner join pays on pays.id_j= users.id_j '+
'group by users.ID_J, '+
'users.name, '+
'users.lastName, '+
'users.CIN,'+
'users.tel, '+
'users.job, '+
'users.adr, '+
'users.email, '+
'users.joinDate, '+
'users.commit, '+
'users.LastPayDate;';فاذا لم يكن هناك record في الجدول pays, لن يضهر Record الـusers ارغب ان يظهر في Total صفر 0 اذا لم يكن هناك record في الجدول pays كيف ذلك؟؟ اضن علي التحقيق في جدول pays, اذا لم يجد users.ID_J يضيف Record جديد بـAmount = 0 ؟؟ حل لمشكل sql هذا؟ - yassine_hell - 25-03-2012 هذه محاولتي: كود : if check then
begin
MDBGrib.DataSource := nil;
IDList := TStringList.Create;
ADOQuery1.SQL.Text := 'Select ID_J from users';
ADOQuery1.Active := true;
while not DataSource1.DataSet.EOF do
begin
IDList.Add(DataSource1.DataSet.FieldByName('ID_J').AsString);
DataSource1.dataset.next;
end;
for i := 0 to IDList.count-1 do
begin
ADOQuery1.SQL.Text := 'Select ID_J from pays where ID_J = '+IDList.Strings[i];
ADOQuery1.Active := true;
if length(ADOQuery1.Fields[0].AsString)=0 then
begin
ADOQuery1.SQL.Text := 'Insert INTO pays values('+IDList.Strings[i]+',1999,02,02,0)';
ADOQuery1.ExecSQL;
end;
end;
MDBGrib.DataSource := DataSource1;
end;حل لمشكل sql هذا؟ - m.rabee - 25-03-2012 وعليكم السلام يمكنك استخدام FULL JOIN بدلاً من inner join حل لمشكل sql هذا؟ - yassine_hell - 25-03-2012 يضهر لي: Error : Unspecified error شكرا على التقريب للاجابة لكن الحل هو Left outer join ... وجدت الحل كامل اخيرا : كود : ADOQuery1.SQL.Text := 'SELECT users.ID_J as['+words[21]+'], '+
'users.name as ['+words[9]+'], '+
'users.lastName as ['+words[10]+'], '+
'users.CIN as ['+words[11]+'], '+
'users.tel as ['+words[12]+'], '+
'users.job as ['+words[13]+'], '+
'users.adr as ['+words[14]+'], '+
'users.email as ['+words[15]+'], '+
'users.JoinDate as ['+words[16]+'], '+
'users.commit as ['+words[17]+'], '+
'users.LastPayDate as ['+Words[18]+'], '+
'IIF(IsNull(pays.Amount), "00,00" , Format(pays.Amount,"00.00")) as ['+Words[20]+'] '+
'FROM users '+
'left outer join pays on pays.id_j= users.id_j '+
'group by users.ID_J, '+
'users.name, '+
'users.lastName, '+
'users.CIN,'+
'users.tel, '+
'users.job, '+
'users.adr, '+
'users.email, '+
'users.joinDate, '+
'users.commit, '+
'users.LastPayDate, '+
'pays.amount;'; |