alias בשאילתא

  • Post
    debi
    משתתף
    שלום,

    אני צריכה להביא את השדה הבא לתוך דו"ח (שמופעל מפרוצדורה).

    רקע- בהפעלת הפרוצדורה בוחרים ב-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>
    עזרתכם האדיבה בבקשה

    תודה

     

מוצגות 15 תגובות – 1 עד 15 (מתוך 15 סה״כ)
  • Replies
    yitzchok
    משתתף
    IL
    לי, לפחות, לא ברור מה את צריכה כאן.

    את כותבת "שדה שחסר לי בדו"ח" ואז "בסוף אני מעוניינת להוסיף שורה" והשאילתא כאן שולפת ערך יחיד לתוך משתנה – מדובר בשאילתא לאוכלוסיית הדו"ח או משהו של שלב עוד לפני זה?

    אני מציע להסביר מחדש (בלי פרטים טכניים של השאילתא) מה הדו"ח עושה כרגע ומה השינוי שאת רוצה לעשות בו. כי אני חושש שאולי זה כלל לא עניין של alias אלא דבר שצריכים לעשות באופן אחר ממה שאת חושבת.

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    debi
    משתתף
    שלום וסליחה על הניסוח המבלבל..

    זהו דו"ח (מופעל מפרוצדורה) עבור RECALL של מוצר. בהרצת הדו"ח בוחרים בקלט פק"ע של מוצר סופי ועליו הדו"ח ירוץ.

    הדו"ח מציג סה"כ מכירות פר לקוח מאצווה זו.

    אני מעוניינת להוסיף שדה שיופיע ככותרת ויציג מס' פק"ע של אחד ממוצרי הבן של אותו מוצר שנבחר בניפוק לרשימת זווד של אותו מוצר סופי.

    (הדרך לייחד את מוצר בן זה היא ע"י הגדרת טווח לשדה SPEC6)

    * לעיתים יהיה למוצר סופי ניפוק של כמה מוצרי בן המדוברים ואז יופיעו כמה אצוות

    * לעיתים יהיו מוצרים סופיים ללא מוצר בן מדובר

    הבעיה שלי הייתה (לפי מה שהבנתי כי הדוח יצא ריק) הוא החיבור/חיתוך בשאילתא בין SERIAL של מוצר סופי ל-SERIAL של מוצר בן

    תודה רבה רבה

    yitzchok
    משתתף
    IL
    אז הפק"ע של הבן יופיע פעם אחת, עבור הפק"ע היחיד בדו"ח, ואת בוחרת אותה מראש ע"י השאילתא שציטטת? היא מחזירה לך ערך?

    הבעיה שלך בדו"ח עצמו או בשלב הכנה?

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    debi
    משתתף
    שלום,

    הפק"ע אב (של מוצר סופי) נבחרת בקלט פרוצדורה ומגיעה.

    מה שאני לא מצליחה להציג זה הפק"ע/ות בן (של מוצר בן בניפוק לרשימת זווד)

    אני מנסה להוציא את הפקע בן לתוך משתנה לוקלי ואז יוכנס לסטאק ויוצג בדו"ח

    לא הולך לי כנראה בגלל ש:

    1. לא הצלחתי לחתוך בין מסך אב (SERIAL) לבן (TRANSORDER_K)

    2. רציתי לכתוב תנאי שפק"ע מוצר סופי במסך SERIAL שווה לפק"ע מוצר סופי שנבחר בקלט

    ואז פה הסתבכתי עם חיתוכים וחשבתי שצריך alias

    תודה על הסבלנות

    yitzchok
    משתתף
    IL
    לא ממש ירדתי לפרטים, רק קיבלתי רושם; נראה אם הבנתי נכון:

    את רוצה להציג עבור כל פק"ע בדו"ח (כאשר פק"עות אלה לפי הקלט, ויש שורת כותרת לכל פק"ע) איזה פק"ע אחר אותה את לוקחת מרשימת ניפוקים לרשימת זווד. ואז את מיפוי הזה כבר הכנת בטבלת סטאק כלשהיא אבל לא הצלחת לסדר את זה בדו"ח.

    אני אניח שאת מכניסה את הנתונים האלה ל-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.

    אני מקווה שזאת תשובה לשאלה.

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    debi
    משתתף
    אני מאד מודה לך על העזרה, בהחלטת הבנת את הבקשה. אנסה את הדרך הזו. תודה
    debi
    משתתף
    שלום,

    פעלתי ע"פ הנחיותיך. ועדיין הוא לא מצליח להציג את "הפקע הנוספת" דהיינו 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>
    אשמח להכוונה נוספת בבקשה

    תודה וחג פורים שמח

    yitzchok
    משתתף
    IL
    בעיה אולי באיך ש-STACK2 מגיע לדו"ח? הפרמטר צריך להיות בשלב הדו"ח עם STACK2 בעמודת "ערך"
      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    debi
    משתתף
    שלום,

    הפרמטר של סטאק 2 נמצא בשלבי הדו"ח כולל STACK2 ב-'ערך'

    ניסיתי להציג בדו"ח את עמודות הסטאק: ELEMENT +TYPE ורק ELEMENT מחזיר ערך של פק"ע הפק"ע המובילה ואילו TYPE נשאר ריק

    מרגישה שיש משהו קטן שמתפספס לי אך לא מוצאת מהו

    תודה

    yitzchok
    משתתף
    IL
    היום קראתי שוב וראיתי שכתבת

    2. הוצאתי עמודות STACK2 לקובץ והוא הציג רק את STACK2.ELEMENT

    חשבתי שכתבת שהיה תקין. לאור הנ"ל מה שכתבת הבוקר לא פלא.

    הבעיה בהכנת הנתונים לטבלה זו.

    לאור בדיקה מס' 1 שלך (שכנראה מאמתת את הערך ב-hold אבל שווה לוודא את זה) הייתי אומר שאת צריכה להתמקד ב-insert.

    למה יש לך insert עם select ו- group by כאשר הנתונים במשתנים? זאת שיטה מוזרה. עדיף values…

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    debi
    משתתף
    שלום,

    עשיתי insert select משום שהמשתנה  :DEBI_SERIAL (שמחזיק את הפק"ע הראשית מתוך הקרסור) הוכנס לסטאק8 בסוף הקרסור ואח"כ הוכנס לסטאק4 (בשביל חישוב נתונים נוספים) ולכן הסקתי שעתה נקרא STACK4.KEY.

    שיניתי וכתבתי: INSERT INTO STACK2 (ELEMENT, TYPE)
    VALUES (:DEBI_SERIAL, :HOLD);

    והדו"ח יצא ריק

    הלכתי לאיבוד ….

    debi
    משתתף
    שלום, המשכתי לדאבג …. והוצאתי לקובץ את המשתנים הלוקליים שבשאילתא ומצאתי שהמשתנה שמחזיק את הפק"ע הנוספת יוצא ריק… ולכן בהתאמה לא מגיע כלום לטבלאות סטאק…

    אמשיך לחפש ולהבין מדוע משנה :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>

    debi
    משתתף
    שלום,

    מעדכנת שהצלחתי ברוך ה'

    אכן הבעיה הייתה במשתנה הלוקלי :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>

    yitzchok
    משתתף
    IL
    מצוין שהסתדרת.

    זה מעיד על למה קשה לנו לעזור בהרבה מקרים.

    היה אפשר לומר גם שהבעיה היתה שלא נתת אליאס לטבלה המלונקקת של הקלט שלך (ובכל מיני מקומות בהתאם)…

    לדעתי אם תנסי שוב את הפקודה עם values היא תעבוד.

    הרי לשאילתא הזאת פשוט מוזרה – ה-GROUP BY בעצם זהה ל-DISTINCT ואת לא מביאה כלום מ-STACK4 רק מתנה בזה שיש שורה שם (ותמיד תהיה אם לא תתני לפחות במפתח שלא שווה 0), כך שאני ממש לא רואה ערך לפניה לטבלה בכלל.

    INSERT INTO STACK2 (ELEMENT, TYPE)
    SELECT :DEBI_SERIAL, :HOLD FROM STACK4
    GROUP BY 1;

     

      [ בבקשה לא לשלוח הודעות פרטיות במערכת - אני לא קורא אותן ]
    debi
    משתתף
    אתם עוזרים ומכוונים מאד. עצם זה שיש מקום לפנות אליו זה הרבה.

    אנסה כעת עם insert values

    תודה רבה

מוצגות 15 תגובות – 1 עד 15 (מתוך 15 סה״כ)
  • יש להתחבר למערכת על מנת להגיב.