אקסס | קבלת עמודות בשאילתה מוצלבת באופן דינאמי
-
יש לי שאילתה מוצלבת באקסס שמורכבת מתורמים ותרומות באופן הנ"ל
| קוד תורם | שם תורם וכו' | תשס | תשסא|תשסב| וכו' |
כל עמודה של שנה מסכם לי את התרומות של תורם XXX כלפי אותה השנה.
כעת אני מכניס את נתוני 3 השנים האחרונות ע"י סינון בכותרת עמודה כך:
אני רוצה לקבל באופן דינאמי את השדות של השנה הנוכחית ושני השנים שקודמות להם.
יש לי פונקציה שעשיתי שמחזירה את השנה הנוכחית אבל לא הצלחתי להכניס את זה לשאילתה לדוגמא:
זה הקוד sql של השאילתה המוצלבת שמקבלת נתונים של השדות"תשפב","תשפג","תשפד"
בתוך ה ? :
סליחה על העברית:TRANSFORM Sum(תרומות.סכום) AS Sumמתוךסכום SELECT [רשימת תורמים].קוד_תורם, [רשימת תורמים].שם_משפחה, [רשימת תורמים].שם_פרטי, [רשימת תורמים].כתובת, [רשימת תורמים].[מס'], [רשימת תורמים].דירה, [רשימת תורמים].[לא לפקוד], [רשימת תורמים].נפקד, [רשימת תורמים]![קוד_קטגוריות] & " " & [רשימת תורמים]![הערות] AS הערות, [רשימת תורמים].טלפון, [רשימת תורמים].טלפון_נייד, [רשימת תורמים].[זמן איסוף], [רשימת תורמים].קטגוריה_כן_לא, [רשימת תורמים].[קוד אזור], [רשימת תורמים].עיר FROM [רשימת תורמים] LEFT JOIN תרומות ON [רשימת תורמים].קוד_תורם = תרומות.קוד_תורם GROUP BY [רשימת תורמים].קוד_תורם, [רשימת תורמים].שם_משפחה, [רשימת תורמים].שם_פרטי, [רשימת תורמים].כתובת, [רשימת תורמים].[מס'], [רשימת תורמים].דירה, [רשימת תורמים].[לא לפקוד], [רשימת תורמים].נפקד, [רשימת תורמים]![קוד_קטגוריות] & " " & [רשימת תורמים]![הערות], [רשימת תורמים].טלפון, [רשימת תורמים].טלפון_נייד, [רשימת תורמים].[זמן איסוף], [רשימת תורמים].קטגוריה_כן_לא, [רשימת תורמים].[קוד אזור], [רשימת תורמים].עיר ORDER BY [רשימת תורמים].כתובת, [רשימת תורמים].[מס'] PIVOT תרומות.שנה In ("תשפב","תשפג","תשפד");
ניסיתי לכתוב כך אך אני מקבל שגיאה:
PIVOT תרומות.שנה In (vbYear(,True));
הוספתי אופרטורים אך לא מחזיר כלוםיצרתי שאילתה שמחזירה את 3 השנים באופן הבא
SELECT Years.HebrewYear FROM Years WHERE (((Years.[true])=True));
ובSQLPIVOT תרומות.שנה In (SELECT Years.HebrewYear FROM Years WHERE (((Years.[true])=True)););
ומקבל
ובהוספת אופרטורים
האם יש פתרון???!!!
אני מבקש שוב אני רוצה תוצאה של דינמאי (כלומר שלא כל שנה אני צריך לעשות מעבר שנה אלא יזהה מה השנה הנוכחית ויעבוד לבד).תודה רבה מראש.
-
@אוריי כתב באקסס | קבלת עמודות בשאילתה מוצלבת באופן דינאמי:
TRANSFORM Sum(תרומות.סכום) AS Sumמתוךסכום
SELECT [רשימת תורמים].קוד_תורם, [רשימת תורמים].שם_משפחה, [רשימת תורמים].שם_פרטי, [רשימת תורמים].כתובת, [רשימת תורמים].[מס'], [רשימת תורמים].דירה, [רשימת תורמים].[לא לפקוד], [רשימת תורמים].נפקד, [רשימת תורמים]![קוד_קטגוריות] & " " & [רשימת תורמים]![הערות] AS הערות, [רשימת תורמים].טלפון, [רשימת תורמים].טלפון_נייד, [רשימת תורמים].[זמן איסוף], [רשימת תורמים].קטגוריה_כן_לא, [רשימת תורמים].[קוד אזור], [רשימת תורמים].עיר
FROM [רשימת תורמים] LEFT JOIN תרומות ON [רשימת תורמים].קוד_תורם = תרומות.קוד_תורם
GROUP BY [רשימת תורמים].קוד_תורם, [רשימת תורמים].שם_משפחה, [רשימת תורמים].שם_פרטי, [רשימת תורמים].כתובת, [רשימת תורמים].[מס'], [רשימת תורמים].דירה, [רשימת תורמים].[לא לפקוד], [רשימת תורמים].נפקד, [רשימת תורמים]![קוד_קטגוריות] & " " & [רשימת תורמים]![הערות], [רשימת תורמים].טלפון, [רשימת תורמים].טלפון_נייד, [רשימת תורמים].[זמן איסוף], [רשימת תורמים].קטגוריה_כן_לא, [רשימת תורמים].[קוד אזור], [רשימת תורמים].עיר
ORDER BY [רשימת תורמים].כתובת, [רשימת תורמים].[מס']
PIVOT תרומות.שנה In ("תשפב","תשפג","תשפד");תוסיף פונקציה של שנה נוכחית שנה קודמת ועוד קודם דוגמה
FUNCTION שנים אחרונות(כמה_שנים)
A= DLAST ("שנה","רשימת תורמים")
IF כמה_שנים =1 THEN שנים_אחרונות=A
IF כמה_שנים =2 THEN שנים_אחרונות= DLAST ("שנה","רשימת תורמים","שנה<>'" & A & "')
END FUNCTION -
@אוריי כתב באקסס | קבלת עמודות בשאילתה מוצלבת באופן דינאמי:
ניסיתי לכתוב כך אך אני מקבל שגיאה:
PIVOT תרומות.שנה In (vbYear(,True));
תנאי מוסיפים בשאילתה עצמה, לדוגמא:
TRANSFORM Sum(תרומות.סכום) AS Sumמתוךסכום SELECT [רשימת תורמים].קוד_תורם, [רשימת תורמים].שם_משפחה, [רשימת תורמים].שם_פרטי, [רשימת תורמים].כתובת, [רשימת תורמים].[מס'], [רשימת תורמים].דירה, [רשימת תורמים].[לא לפקוד], [רשימת תורמים].נפקד, [רשימת תורמים]![קוד_קטגוריות] & " " & [רשימת תורמים]![הערות] AS הערות, [רשימת תורמים].טלפון, [רשימת תורמים].טלפון_נייד, [רשימת תורמים].[זמן איסוף], [רשימת תורמים].קטגוריה_כן_לא, [רשימת תורמים].[קוד אזור], [רשימת תורמים].עיר FROM [רשימת תורמים] LEFT JOIN תרומות ON [רשימת תורמים].קוד_תורם = תרומות.קוד_תורם WHERE (( תרומות.שנה) In (SELECT Years.HebrewYear FROM Years WHERE (((Years.[true])=True)))) GROUP BY [רשימת תורמים].קוד_תורם, [רשימת תורמים].שם_משפחה, [רשימת תורמים].שם_פרטי, [רשימת תורמים].כתובת, [רשימת תורמים].[מס'], [רשימת תורמים].דירה, [רשימת תורמים].[לא לפקוד], [רשימת תורמים].נפקד, [רשימת תורמים]![קוד_קטגוריות] & " " & [רשימת תורמים]![הערות], [רשימת תורמים].טלפון, [רשימת תורמים].טלפון_נייד, [רשימת תורמים].[זמן איסוף], [רשימת תורמים].קטגוריה_כן_לא, [רשימת תורמים].[קוד אזור], [רשימת תורמים].עיר ORDER BY [רשימת תורמים].כתובת, [רשימת תורמים].[מס'] PIVOT תרומות.שנה;
עוד נקודה חשובה: לא שמים ; אלא בסוף השאילתה, ולא בשאילתות משנה.
נ.ב. ברשומות רבות שאילתה כזו יכולה לקחת זמן בטעינה בגלל שבעצם היא יוצרת שאילתה נוספת בכל שורה, שקול להכניס גם את טבלת השנים ב left join.