› פורומים › אפיון ופיתוח פריוריטי › alias בשאילתא
- This topic has 15 תגובות, 2 משתתפים, and was last updated לפני 2 שנים, 7 חודשים by debi.
- Post
-
- מרץ 8, 2022 בשעה 6:01 pm
שלום,אני צריכה להביא את השדה הבא לתוך דו"ח (שמופעל מפרוצדורה).
רקע- בהפעלת הפרוצדורה בוחרים ב-INPUT מס' פק"ע של מוצר סופי עליו ירוץ הדו"ח
שדה שחסר לי בדו"ח – נדרש פק"ע של מוצר חומר גלם (ספציפי ע"פ תנאים) שנופק בניפוק לרשימת זווד (TRANSORDER_K)
ניסיתי אינספור דרכים ולא הצלחתי לכתוב alias בשאילתא ל-SERIAL
זה מה שניסיתי:
<p style="direction: ltr;">:HOLDSERIAL = ";</p>
<p style="direction: ltr;">SELECT SERIAL.SERIALNAME INTO :HOLDSERIAL</p>
<p style="direction: ltr;">FROM SERIAL, TRANSORDER, PART' PARTSPEC</p>
<p style="direction: ltr;">WHERE TRANSORDER.SERIAL= SERIAL.SERIAL</p>
<p style="direction: ltr;">AND TRANSORDER.PART = PART.PART</p>
<p style="direction: ltr;">AND PARTSPEC.PART = PART.PART</p>
<p style="direction: ltr;">AND TRANSORDER.TYPE = 'K'</p>
<p style="direction: ltr;">AND PARTSPEC.SPEC6 BETWEEN '110' AND '120'</p>
<p style="direction: rtl;">בסוף אני מעוניינת להוסיף שורה שאומרת שהפק"ע (של מסך אב פקעות) שווה DEBI_SERIAL: שהוא הפק"ע של המוצר הסופי מתוך הקרסור…. וכאן נדרש alias וכל מה שניסיתי לא הלך..</p>
עזרתכם האדיבה בבקשהתודה
- Replies
-
- מרץ 9, 2022 בשעה 6:51 am
לי, לפחות, לא ברור מה את צריכה כאן.את כותבת "שדה שחסר לי בדו"ח" ואז "בסוף אני מעוניינת להוסיף שורה" והשאילתא כאן שולפת ערך יחיד לתוך משתנה – מדובר בשאילתא לאוכלוסיית הדו"ח או משהו של שלב עוד לפני זה?
אני מציע להסביר מחדש (בלי פרטים טכניים של השאילתא) מה הדו"ח עושה כרגע ומה השינוי שאת רוצה לעשות בו. כי אני חושש שאולי זה כלל לא עניין של alias אלא דבר שצריכים לעשות באופן אחר ממה שאת חושבת.
[ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]- מרץ 9, 2022 בשעה 7:42 am
שלום וסליחה על הניסוח המבלבל..זהו דו"ח (מופעל מפרוצדורה) עבור RECALL של מוצר. בהרצת הדו"ח בוחרים בקלט פק"ע של מוצר סופי ועליו הדו"ח ירוץ.
הדו"ח מציג סה"כ מכירות פר לקוח מאצווה זו.
אני מעוניינת להוסיף שדה שיופיע ככותרת ויציג מס' פק"ע של אחד ממוצרי הבן של אותו מוצר שנבחר בניפוק לרשימת זווד של אותו מוצר סופי.
(הדרך לייחד את מוצר בן זה היא ע"י הגדרת טווח לשדה SPEC6)
* לעיתים יהיה למוצר סופי ניפוק של כמה מוצרי בן המדוברים ואז יופיעו כמה אצוות
* לעיתים יהיו מוצרים סופיים ללא מוצר בן מדובר
הבעיה שלי הייתה (לפי מה שהבנתי כי הדוח יצא ריק) הוא החיבור/חיתוך בשאילתא בין SERIAL של מוצר סופי ל-SERIAL של מוצר בן
תודה רבה רבה
- מרץ 9, 2022 בשעה 9:30 am
אז הפק"ע של הבן יופיע פעם אחת, עבור הפק"ע היחיד בדו"ח, ואת בוחרת אותה מראש ע"י השאילתא שציטטת? היא מחזירה לך ערך?הבעיה שלך בדו"ח עצמו או בשלב הכנה?
[ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]- מרץ 9, 2022 בשעה 12:08 pm
שלום,הפק"ע אב (של מוצר סופי) נבחרת בקלט פרוצדורה ומגיעה.
מה שאני לא מצליחה להציג זה הפק"ע/ות בן (של מוצר בן בניפוק לרשימת זווד)
אני מנסה להוציא את הפקע בן לתוך משתנה לוקלי ואז יוכנס לסטאק ויוצג בדו"ח
לא הולך לי כנראה בגלל ש:
1. לא הצלחתי לחתוך בין מסך אב (SERIAL) לבן (TRANSORDER_K)
2. רציתי לכתוב תנאי שפק"ע מוצר סופי במסך SERIAL שווה לפק"ע מוצר סופי שנבחר בקלט
ואז פה הסתבכתי עם חיתוכים וחשבתי שצריך alias
תודה על הסבלנות
- מרץ 12, 2022 בשעה 11:26 pm
לא ממש ירדתי לפרטים, רק קיבלתי רושם; נראה אם הבנתי נכון:את רוצה להציג עבור כל פק"ע בדו"ח (כאשר פק"עות אלה לפי הקלט, ויש שורת כותרת לכל פק"ע) איזה פק"ע אחר אותה את לוקחת מרשימת ניפוקים לרשימת זווד. ואז את מיפוי הזה כבר הכנת בטבלת סטאק כלשהיא אבל לא הצלחת לסדר את זה בדו"ח.
אני אניח שאת מכניסה את הנתונים האלה ל-STACK2 כאשר ב- ELEMENT יש את הפק"ע המובילה וב-TYPE הפק"ע שאת מצאת. (בדרך אגב אם השאילתא שציטטת היא זאת שמחפשת את הפק"ע השניה לא הייתי שומר את SERIALNAME אלא את-SERIAL, אז השתמשתי כאן ב-TYPE שהיא עמודת INT)
אז את מגדירה את הטבלה הזאת כפרטמר בשלב הדו"ח (מניח שזה לא חידוש) ואז חשוב בתוך הדו"ח לתחוך נכון. נשמע שאת מכירה את המושג alias בשאילתאות ולא רואה איך משיגים את זה במחולל הדו"חות. שם מה שחשוב זה מזהה הטבלה. המזהה מבדיל בין מופעים של הטבלה, מאחורי הקלעים נוצר alias בשאילתו שנכתבה על סמך ההגדרות במחולל – אם יש לך SERIAL עם מזהה 0 אז ב-FROM יהיה SERIAL ואם יש לך SERIAL עם מזהה 1 אז ב-FROM יהיה SERIAL SERIAL1.
ולכן בדו"ח שלך את צריכה לתחוך מעמודת SERIAL בטבלת SERIAL מזהה 0 ל-ELEMENT ב-STACK2 מזהה 0 (בדוגמה הנ"ל) ואז מ-TYPE ב-STACK2 מזהה 0 ל-SERIAL ב-SERIAL מזהה 1 ואז בעמודה החדשה בכותרת (מס' פק"ע נוספת) SERIALNAME מ-SERIAL מזהה 1.
אני מקווה שזאת תשובה לשאלה.
[ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]- מרץ 13, 2022 בשעה 9:05 am
אני מאד מודה לך על העזרה, בהחלטת הבנת את הבקשה. אנסה את הדרך הזו. תודה- מרץ 15, 2022 בשעה 6:43 pm
שלום,פעלתי ע"פ הנחיותיך. ועדיין הוא לא מצליח להציג את "הפקע הנוספת" דהיינו STACK2.TYPE
עשיתי מס' דיבוגים:
1. בדקתי את השאילתא שמחזירה את הפקע הנוספת ב-WINDBI ← עובד מצוין
2. הוצאתי עמודות STACK2 לקובץ והוא הציג רק את STACK2.ELEMENT
3. עשיתי חיתוכים בדו"ח ע"פ מה שרשמת
שאילתא:
<p style="direction: ltr;">/*find hold*/</p>
<p style="direction: ltr;">:HOLD = 0;</p>
<p style="direction: ltr;">SELECT SERIAL.SERIAL</p>
<p style="direction: ltr;">INTO :HOLD</p>
<p style="direction: ltr;">FROM SERIAL, PART, PARTSPEC, TRANSORDER</p>
<p style="direction: ltr;">WHERE PART.PART = SERIAL.PART</p>
<p style="direction: ltr;">AND PART.PART = PARTSPEC.PART</p>
<p style="direction: ltr;">AND SERIAL.SERIAL = TRANSORDER.SERIAL</p>
<p style="direction: ltr;">AND TRANSORDER.TYPE = 'K'</p>
<p style="direction: ltr;">AND TRANSORDER.FORSERIAL = :DEBI_SERIAL</p>
<p style="direction: ltr;">AND PARTSPEC.SPEC6 BETWEEN '110' AND '120';</p>
הכנסה לסטאק2:
<p style="direction: ltr;">/*-insert hold-*/</p>
<p style="direction: ltr;">INSERT INTO STACK2 (ELEMENT, TYPE)</p>
<p style="direction: ltr;">SELECT :DEBI_SERIAL, :HOLD FROM STACK4</p>
<p style="direction: ltr;">GROUP BY 1;</p>
חיתוכים בדו"ח עצמו (הסדר ע"פ איך שמופיע בדו"ח …) :
<p style="direction: ltr;">STACK2.ELEMENT = SERIAL.SERIAL</p>
<p style="direction: ltr;">SERIAL.SERIAL (מזהה חיתוך 1) = STACK2.TYPE</p>
עמודה בדו"ח:
<p style="direction: ltr;">SERIAL.SERIALNAME (מזהה עמודה 1)</p>
אשמח להכוונה נוספת בבקשהתודה וחג פורים שמח
- מרץ 15, 2022 בשעה 9:12 pm
בעיה אולי באיך ש-STACK2 מגיע לדו"ח? הפרמטר צריך להיות בשלב הדו"ח עם STACK2 בעמודת "ערך"[ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]- מרץ 16, 2022 בשעה 8:01 am
שלום,הפרמטר של סטאק 2 נמצא בשלבי הדו"ח כולל STACK2 ב-'ערך'
ניסיתי להציג בדו"ח את עמודות הסטאק: ELEMENT +TYPE ורק ELEMENT מחזיר ערך של פק"ע הפק"ע המובילה ואילו TYPE נשאר ריק
מרגישה שיש משהו קטן שמתפספס לי אך לא מוצאת מהו
תודה
- מרץ 16, 2022 בשעה 10:16 am
היום קראתי שוב וראיתי שכתבת2. הוצאתי עמודות STACK2 לקובץ והוא הציג רק את STACK2.ELEMENT
חשבתי שכתבת שהיה תקין. לאור הנ"ל מה שכתבת הבוקר לא פלא.
הבעיה בהכנת הנתונים לטבלה זו.
לאור בדיקה מס' 1 שלך (שכנראה מאמתת את הערך ב-hold אבל שווה לוודא את זה) הייתי אומר שאת צריכה להתמקד ב-insert.
למה יש לך insert עם select ו- group by כאשר הנתונים במשתנים? זאת שיטה מוזרה. עדיף values…
[ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]- מרץ 20, 2022 בשעה 10:17 am
שלום,עשיתי insert select משום שהמשתנה :DEBI_SERIAL (שמחזיק את הפק"ע הראשית מתוך הקרסור) הוכנס לסטאק8 בסוף הקרסור ואח"כ הוכנס לסטאק4 (בשביל חישוב נתונים נוספים) ולכן הסקתי שעתה נקרא STACK4.KEY.
שיניתי וכתבתי: INSERT INTO STACK2 (ELEMENT, TYPE)
VALUES (:DEBI_SERIAL, :HOLD);והדו"ח יצא ריק
הלכתי לאיבוד ….
- מרץ 20, 2022 בשעה 2:25 pm
שלום, המשכתי לדאבג …. והוצאתי לקובץ את המשתנים הלוקליים שבשאילתא ומצאתי שהמשתנה שמחזיק את הפק"ע הנוספת יוצא ריק… ולכן בהתאמה לא מגיע כלום לטבלאות סטאק…אמשיך לחפש ולהבין מדוע משנה :HOLD יצא ריק. לדעתי אולי בגלל חיתוכים שגויים בין פק"ע מקור ופק"ע הנוספת…
מצ"ב השאילתא לעיונך – תודה רבה!!
<p style="direction: ltr;">:HOLD = 0;</p>
<p style="direction: ltr;">SELECT SERIAL.SERIAL</p>
<p style="direction: ltr;">INTO :HOLD</p>
<p style="direction: ltr;">FROM SERIAL, PART, PARTSPEC, TRANSORDER</p>
<p style="direction: ltr;">WHERE PART.PART = SERIAL.PART</p>
<p style="direction: ltr;">AND PART.PART = PARTSPEC.PART</p>
<p style="direction: ltr;">AND SERIAL.SERIAL = TRANSORDER.SERIAL</p>
<p style="direction: ltr;">AND TRANSORDER.TYPE = 'K'</p>
<p style="direction: ltr;">AND TRANSORDER.FORSERIAL = :DEBI_SERIAL</p>
<p style="direction: ltr;">AND PARTSPEC.SPEC6 BETWEEN '110' AND '120';</p>- מרץ 20, 2022 בשעה 3:08 pm
שלום,מעדכנת שהצלחתי ברוך ה'
אכן הבעיה הייתה במשתנה הלוקלי :HOLD
והבעיה הייתה שלא היה בשאילתא ALIAS
ניסיתי עד שהצלחתי וזה עובד
<p style="direction: ltr;">:HOLD = 0;</p>
<p style="direction: ltr;">SELECT S.SERIAL</p>
<p style="direction: ltr;">INTO :HOLD</p>
<p style="direction: ltr;">FROM SERIAL S, PART, PARTSPEC, TRANSORDER</p>
<p style="direction: ltr;">WHERE PART.PART = S.PART</p>
<p style="direction: ltr;">AND PART.PART = PARTSPEC.PART</p>
<p style="direction: ltr;">AND S.SERIAL = TRANSORDER.SERIAL</p>
<p style="direction: ltr;">AND TRANSORDER.TYPE = 'K'</p>
<p style="direction: ltr;">AND TRANSORDER.FORSERIAL = :DEBI_SERIAL</p>
<p style="direction: ltr;">AND PARTSPEC.SPEC6 BETWEEN '110' AND '120';</p>- מרץ 20, 2022 בשעה 4:57 pm
מצוין שהסתדרת.זה מעיד על למה קשה לנו לעזור בהרבה מקרים.
היה אפשר לומר גם שהבעיה היתה שלא נתת אליאס לטבלה המלונקקת של הקלט שלך (ובכל מיני מקומות בהתאם)…
לדעתי אם תנסי שוב את הפקודה עם values היא תעבוד.
הרי לשאילתא הזאת פשוט מוזרה – ה-GROUP BY בעצם זהה ל-DISTINCT ואת לא מביאה כלום מ-STACK4 רק מתנה בזה שיש שורה שם (ותמיד תהיה אם לא תתני לפחות במפתח שלא שווה 0), כך שאני ממש לא רואה ערך לפניה לטבלה בכלל.
INSERT INTO STACK2 (ELEMENT, TYPE)
SELECT :DEBI_SERIAL, :HOLD FROM STACK4
GROUP BY 1;[ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
- יש להתחבר למערכת על מנת להגיב.