1 ضمیمه
جمع دو ستون از یک جدول دارای شرط بدون فیلد کلید
باسلام
یک جدول داریم به نام Data
سه ستون داره به نام mark1 , mark2 و code
دو کوئری داریم که هر کدام بر اساس فیلد code روی ستون های mark1 , mark2 یک شرط خاص را اعمال میکند.
حالا باید یک گزارش داشته باشیم که این دو ستون رو با مقادیرش نمایش بده و Mark1+Mark2 کنه و در یک textbox نمایش بده.
نکته: ما در این جدول فیلد کلید نمیتونیم داشته باشیم.(این دیتا رو از یک فایل اکسل که وصله به این اکسس میخونیم)
ستون ها همه shortText هستند و عددی نیستند.
از اونجایی که کلید نداریم داده تکراری و اشتباه نشون میده چطور میشه این مشکل رو حل کرد؟
ممنون میشم از اساتید بزرگوار راهنمایی کنند
فایل نمونه رو پیوست کردم تا مفهوم بهتر منتقل بشه
نقل قول: جمع دو ستون از یک جدول دارای شرط بدون فیلد کلید
یک مقدار گنگ مطرح کردین.
براساس همین دو کوئری g10,g100 دقیقا خروجی رو مشخص کنین که چی باید باشه: بصورت یک جدول یا تصویرش
2 ضمیمه
نقل قول: جمع دو ستون از یک جدول دارای شرط بدون فیلد کلید
خروجی رو در فالب یک عکس گذاشتم
فایل اکسس رو هم مجدد گذاشتم
سپاس
2 ضمیمه
نقل قول: جمع دو ستون از یک جدول دارای شرط بدون فیلد کلید
اینکه در جدول data فیلد کلید ندارین مهم نیست، باید در کوئری های g10,g100 یک فیلد ردیف داشته باشین که ندارین.
اگر sql server میبود خب خیلی راحت میتونستیم از rownumber استفاده کنیم. اینجا یک تابع براش مینویسیم و شبیه سازی میکنیم:
Dim XX As Long
Public Function RX(x As Variant) As Long
XX = Nz(XX, 0) + 1
RX = XX
End Function
حالا از این تابع برای ساخت جداول موقت g10,g100 استفاده میکنیم (بجای کوئری)
SELECT mark1,RX([code]) AS ID INTO g10 FROM data WHERE code In ('11','12','13')
SELECT mark2,RX([code]) AS ID INTO g100 FROM data WHERE code In ('150','300')
ضمیمه 149625
ضمیمه 149626
1 ضمیمه
نقل قول: جمع دو ستون از یک جدول دارای شرط بدون فیلد کلید
حالا که شماره ردیف ID رو داریم کافی هست این دو جدول رو outer join کنیم، که این رو هم در اکسس نداریم!
بنابراین یکبار left join و یکبار right join و نتایج رو با هم union میکنیم:
SELECT g10.mark1, g100.mark2
FROM g10 LEFT JOIN g100
ON g10.ID = g100.ID
UNION
SELECT g10.mark1, g100.mark2
FROM g10 RIGHT JOIN g100
ON g10.ID = g100.ID
ضمیمه 149627
1 ضمیمه
نقل قول: جمع دو ستون از یک جدول دارای شرط بدون فیلد کلید
حالا گزارش رو بر مبنای همین کوئری میسازیم و کدهای لازم رو هم اضافه میکنیم:
Private Sub Report_Open(Cancel As Integer)
DoCmd.SetWarnings False
XX = 0
DoCmd.RunSQL ("SELECT mark1,RX([code]) AS ID INTO g10 FROM data WHERE code In ('11','12','13')")
XX = 0
DoCmd.RunSQL ("SELECT mark2,RX([code]) AS ID INTO g100 FROM data WHERE code In ('150','300')")
End Sub
ضمیمه 149628
1 ضمیمه
نقل قول: جمع دو ستون از یک جدول دارای شرط بدون فیلد کلید