PDA

View Full Version : نحوه ضرب رکوردهای یک ستون



farshid_82
جمعه 03 خرداد 1392, 02:04 صبح
سلام
دوستان لطفا راهنمایی کنید چطوری می تونیم حاصل ضرب هر رکورد را با رکورد بعدی در کوئری محاسبه کنیم.
مثال:یک جدول داریم با دو ستون یکی ار نوع autonumber و دیگری از نوع number میخوام حاصل به شکل زیر در بیاد.ممنون

4-----------2---------1
12---------3---------2
24---------2---------3

farshid_82
جمعه 03 خرداد 1392, 14:12 عصر
لطفا راهنمائی کنید گیرم
با کوئری استفاده شده در فایل زیر به راحتی عمل جمع انجام میشه اما برای ضرب نمی دونم چی کار کنم

Abbas Amiri
جمعه 03 خرداد 1392, 15:46 عصر
لطفا راهنمائی کنید گیرم
با کوئری استفاده شده در فایل زیر به راحتی عمل جمع انجام میشه اما برای ضرب نمی دونم چی کار کنم

سلام

ابتدا عرض کنم درمثال پست 1 اولین مورد از چه الگوریتمی تبعیت میکنه ، فکر کنم بجای 4 بایستی 2 باشه.

یک راه حل ساده با استفاده از تابع وجود داره :

اول تابع زیر رو در یک ماژول کپی کنید :


Function MulFieldItself(ID As Long) As Long
Dim rs As Recordset, Res As Long
Set rs = CurrentDb.OpenRecordset("SELECT ID, Field1 FROM Table1 WHERE ID <= " & ID)
Res = 1
With rs
Do Until .EOF
Res = Res * .Fields("Field1")
.MoveNext
Loop
End With
Set rs = Nothing
MulFieldItself = Res
End Function


و بعد کد های SQL زیر رو در یک کوئری قرار دهید:



SELECT Table1.ID, Table1.Field1, MulFieldItself([ID]) AS Mul
FROM Table1;



ولی راه حل منطقی تر استفاده از یک ساب کوئری است که حاصل جمع لگاریتم طبیعی فیلد مورد نظر را به توان عدد نپرین می کند.



SELECT Table1.ID, Table1.Field1, Exp((SELECT (SUM(LOG(Field1))) FROM Table1 T1 WHERE T1.ID <= Table1.ID)) AS lg
FROM Table1;


موفق باشید.