ورود

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



سعید صابری
پنج شنبه 31 اردیبهشت 1388, 11:38 صبح
سلام دوستان

من يك تيبل دارم حدود 30 تا جدول داره كه در تمام اين جدول‌ها فيلد مشترك دارند(number) و از نوع عددي است راه حلي است كه مجموع تمام اين فيلدها(مجموع هر تيبل) در يك گرايد نمايش بدهيم و در يك جدول ديگر ذخيره كنيم(بانك اس كيو ال)

ممنون

merced
پنج شنبه 31 اردیبهشت 1388, 13:39 عصر
من يك تيبل دارم حدود 30 تا جدول داره


یک دیتابیس دارین



مجموع تمام اين فيلدها(مجموع هر تيبل)


احتمالاً مجموع مقدار های یک فیلد در رکوردهای جدول

شما باید جمع تمام این فیلدها رو با دستورات SQL حساب کنی .



Select Sum(NumberField) as SUMOFField from table1

حالا می خوای مجموع این فیلد رو در هر جدول در یک گزید نشون بدی.
ساده ترین راه استفاده از یه جدول موقت هست
راه دوم دوباره استفاده از دستورات SQL هست . UNION

مثلاً



(Select sum(f1) as f1 from table1)
UNION
(Select sum(f1) as f1 from table2)
...
البته الان چیزی ندارم دستورا رو تست کنم . فکر کنم شکلش همینجوری بود

merced
پنج شنبه 31 اردیبهشت 1388, 13:41 عصر
راستی .. شما اگه اسم فیلدت مشترکه تو همه و اسم جداول هم مشابه هستش با یه حلقه ساده می تونی دستور SQL رو تولید کنی و بعد هم اجرا

سعید صابری
پنج شنبه 31 اردیبهشت 1388, 21:01 عصر
راستی .. شما اگه اسم فیلدت مشترکه تو همه و اسم جداول هم مشابه هستش با یه حلقه ساده می تونی دستور SQL رو تولید کنی و بعد هم اجرا

ميشه برام كد نمونه بزارين ممنون ميشم.

Hsimple11
پنج شنبه 31 اردیبهشت 1388, 22:30 عصر
من يك تيبل دارم حدود 30 تا جدول داره

Table همون جدوله.

Union و JOIN را در همین بخش یا در بخش SQL SERVER جستجو کنید. و درنهایت با SUM مجموع را نمایش داده و ذخیره کنید.

merced
پنج شنبه 31 اردیبهشت 1388, 23:03 عصر
ميشه برام كد نمونه بزارين


مثلاً براي دو جدوب كد SQL اين ميشه



SELECT Sum(Num1) AS SumOfNum , 'جدول شماره 1 '
FROM Table1
UNION
SELECT Sum(Num1) AS SumOfNum , 'جدول شماره 2 '
FROM Table2
خوب مي بينيم كه چيزي كه تغيير مي كنه فقط اسم جدوله چون شما گفتي اسم فيلد يكي هست

فقط يه دونه for لازم داري




var i : Integer ;
begin
ADOQuery1.SQL.Clear ;
for i := 1 to 10 do begin
ADOQuery1.SQL.Add('SELECT Sum(Num1) AS SumOfNum , " جدول شماره " ' + IntToStr(i) +' FROM Table' + IntToStr(i)) ;
ADOQuery1.SQL.Add('UNION') ;
end ;
ADOQuery1.SQL.Delete(ADOQuery1.SQL.Count - 1 );
ADOQuery1.Open
اون Delete‌ هم در آخر هست براي يك union اضافي هست
حالا ميشه اگه اسم جدولها و فيلدها با هم فرق مي كنه مي توني اونا رو آرايه بذاري و آرايه رو پيمايش كني تا دستور ساخته بشه

سعید صابری
جمعه 01 خرداد 1388, 11:42 صبح
ممنونم دوست عزيز كارم راه انداختي

چجوري ميشه توي يك بانك ديگه insert كرد همين كد بالا البته + يك فيلد نام
ممنون از راهنماييتون

merced
جمعه 01 خرداد 1388, 23:15 عصر
چجوري ميشه توي يك بانك ديگه insert كرد همين كد بالا البته + يك فيلد نام

احتمالاً‌ منظورتون يه جدول ديگه تو همين بانك هست

با اجراي اون كد بالا يه جدول (Dataset) بر مي گرده با پيماش اون جدول مي تونيد هر بلايي اطلاعاتش در بيارين



Table1.open ;
while not table1.eof do begin
.... // code for insert
table.next
end ;






ضمناً نيازي به درج در يك جدول نداريد (مگه براي بايگاني آمار) شما هر وقت بخواين ميتونين همين اطلاعات رو با كد SQL كه گفته شد بدست بياري .
بسته به نظر و نوع برنامه شماست

سعید صابری
شنبه 02 خرداد 1388, 09:09 صبح
ممنون خيلي عالي بود