PDA

View Full Version : درخواست کمک جهت تبدیل عبارت اس کیو ال



khoshblagh
سه شنبه 21 مهر 1388, 07:06 صبح
با سلام خدمت دوستان
احتراما من مشکلی دارم که نتوانستم تا راه حلی برای آن پیدا نمایم . امیدوارم شما مشکل مرا در این رابطه حل نمائید.
اما اصل موضوع:
من دو جدول دارم که اولی را بر اساس کد گروه بندی و بر اساس مبلغ جمع میشود. سپس نتیجه در جدول دوم در حقیقت خلاصه شده جدول اول است ثبت میشود. من از طریق دستور insert into این عمل را به درستی انجام میدهم که کد آن در زیر نمایش داده شده است. اما بنا به دلایلی میخواهم به جای دستور insert into از دستور update استفاده نمایم. حال باید این دستور طوری نوشته شود که اولامبالغ جدول اولی را جمع بندی بر اساس کد نموده و نتیجه به جدول دوم که در آن کد قبلا درج شده است وارد شود. متشکرم




cmdImportData.CommandText :='INSERT INTO tblGardeshSal(CodProject,Mablagh02,Tedad02)'+




' SELECT '+strStartSal+'.CodProject, Sum('+strStartSal+'.Mablagh)AS Mablagh, Count('+strStartSal+'.CodProject) AS Tedad'+


' FROM '+ strStartSal+



' GROUP BY '+strStartSal+'.CodProject'+



' ORDER BY '+strStartSal+'.CodProject';

young_man1365
سه شنبه 21 مهر 1388, 09:32 صبح
شک دارم که منظورتون رو درست فهمیده باشم. شما میخواید داده هایی رو از جدول ویرایش کنید بطوری که اطلاعات وابسته به آن (جمع مبلغ و .... ) بروز بشه. اگه اینه query زیر رو امتحان کنید:




UPDATE tblgardeshsal SET codproject='+temp1+' , mablagh='+temp2+' , tedad='+temp3+' WHERE codproject='+temp4+';

create temporary table groups (SELECT tblgardeshsal.codproject , SUM(tblgardeshsal.mablagh) as mablagh, count(tblgardeshsal.codeproject) as tedad From tblgardeshsal );

UPDATE strStartSal SET codproject='+temp1+' , mablagh=groups.mablagh , tedad=groups.tedad where codproject='+temp4+';

and finally

drop table groups;


کد بالا عینا" به کار شما نمیاد اما روشش جواب میده. یعنی از اونجا که در دستور update نمیشه از group function ها استفاده کرد، بهتره داده های این توابع رو اول توی یه جدول temporary بریزی و بعد ازشون واسه Update جدول دوم استفاده کنی

khoshblagh
سه شنبه 21 مهر 1388, 10:27 صبح
با سلام خدمت دوستان
من تا اینجا توانستم کد مورد نظر را به شکل عبارت زیر تبدیل نمایم .


cmdImportData.CommandText :='UPDATE tblGardeshSal Set tblGardeshSal.Mablagh01=(SELECT sum(tblTax8801.Mablagh) From tblTax8801 '+
'WHERE tblTax8801.CodProject=tblGardeshSal.CodProject)'+
'WHERE EXISTS (SELECT sum(tblTax8801.Mablagh) FROM tblTax8801 WHERE tblTax8801.CodProject=tblGardeshSal.CodProject '+
'GROUP BY tblTax8801.CodProject '+
'ORDER BY tblTax8801.CodProject )';


اما خطای زیر داده میشه . کسی میدونه علت این خطا چیست؟ متشکرم

operation must use an updateable query

حسین شهریاری
سه شنبه 21 مهر 1388, 10:31 صبح
دوست خوبم بعد از سلام باید به عرض برسونم اگه لطف کنید در تاپیک ها فقط شبه کد
SQL بنویسید زودتر به نتیجه میرسین و بقیه دوستان هم زودتر میتونن از کد شما سردربیارن
چون که ذهنیتی که شما نسبت به کدنویسی خودتون دارین با ذهنیت بقیه فرق داره!!
وبد ازاینکه از دید کد SQl به نتیجه رسیدید اون موقه اون کدا در برنامتون استفاده کنید.

موفق و موید باشید.-شهریاری