עזרה במספור עמודות בדוח

פורומים אפיון ופיתוח פריוריטי עזרה במספור עמודות בדוח

  • Post
    123
    משתתף
    שלום,
    אני צריך עזרה במספור רשומות בדוח. (מצורף)
    אני רוצה למספר כל שורת רכיב במספר רץ. כלומר כל שינוי ברכיב שיופיע המספר הבא. יש רכיבים שמופיעים בכמה מיקומים ולכן הם מקבלים גם כן מספרים.
    האם יש לי דרך לקבוע מספר לפי כל שינוי במק"ט ?

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

מוצגות 13 תגובות – 1 עד 13 (מתוך 13 סה״כ)
  • Replies
    123
    משתתף
    קובץ
    Lior
    מנהל בפורום
    תרוץ בפרוצדורה על המיון של הדוח ותן מספר לכל שורה בטבלה ואת הערך הזה תציג בדוח
    123
    משתתף
    תוכל לתת כיוון איך לבצע ?
    ניסיתי לבצע אך ללא הצלחה.
    איך להריץ גם מיון וגם לשתול ערך נוסף ב GENERALLOAD ?
    123
    משתתף
    אנסה להסביר שוב,
    יש לי את טבלת GENERALLOAD מלאה בנתונים ממויינת ע"פ PART.
    אני רוצה למיין אותה לפי PARTNAME – כיצד אני יכול לבצע את זה בריצה על הטבלה ?
    ניסיתי עם ORDER BY אבל זה לא ממש עובד
    Gabby
    משתתף
    ORDER BY לא מחזיק מים כאשר מבצעים INSERT-SELECT
    roni
    משתתף
    אתה יכול למיין בעזרת CURSOR על PARTNAME
    ולהכניס לטבלה עם RECORDTYPE אחר
    ואז למחוק את הרשומות הקודמות
    roni
    משתתף
    Gabby
    משתתף
    תריץ CURSOR על ה-GENERALLOAD שלך ובשאילתת ה-CURSOR תקבע שהריצה תהיה על פי הערך הממיין (כלומר, ORDER BY על פיו).
    "תחזיק בצד" משתנה COUNTER כלשהו שיקודם בכל איטרציה של ה-CURSOR ויתחיל מ-1.
    את המשתנה הזה תשים בעמודה אחרת של GENERALLOAD על ידי ביצוע UPDATE לרשומה באיטרציה הנוכחית.
    עבור האיטרציה הבאה תדאג לקדם את ה-COUNTER וחוזר חלילה.

    בדוח עצמו תדאג למיין לפי העמודה שלה עשית UPDATE עם ה-COUNTER

    123
    משתתף
    הי גבי,
    ביצעתי על פי מה שרשמת אבל הבעיה היא שהמספור לא עולה באופן רציף אלא במכפלות של מספר הרשומות הזהות בטבלה לפי המיון.
    :COUNT = 0;
    DECLARE G CURSOR FOR
    SELECT LINE,TEXT3,INT6 FROM GENERALLOAD WHERE LINE > 0
    ORDER BY TEXT3;
    OPEN G;
    LABEL 1;
    :COUNT = :COUNT + 1;
    FETCH G INTO :LINE, :TEXT3, :INT6 ;
    GOTO 99 WHERE :RETVAL <= 0;
    UPDATE GENERALLOAD SET INT6 = :COUNT WHERE TEXT3 = :TEXT3;
    LOOP 1;
    LABEL 99;
    CLOSE G;

    מה שיוצא זה שיש לי סדר עולה אבל המרווחים בין הרשומות אינם עוקבים. כנראה אני מקדם לא נכון את המונה או שחסרה לי לולאה נוספת.
    מה שאני צריך שיקרה זה שעל כל מק"ט שונה אני רוצה לקגם את המונה ב-1. מק"ט יכול להופיע בכמה רשומות (בגלל מיקומים שונים בעץ מוצר)
    כיצד אני יכול לבצע בדיקה על הערך הנוכחי ב CURSOR אם הוא שונה מהערך הקודם שנתפס ?

    Gabby
    משתתף
    נראה שקידום המונה בסדר.

    שמתי לב שבשאילתת ה-CURSOR שלך אתה מבצע שליפה של מספר שדות, ביניהם כנראה המק"ט.
    עם זאת, בשלב ה-UPDATE אתה מבצע עדכון לפי שדה TEXT3. מדוע ?

    הייתי מצפה שתבצע עדכון לפי השדה הייחודי של טבלה זו –> LINE.
    בדרך זו תבצע עדכון אך ורק לשורה אותה שלפת באיטרצית ה-CURSOR.

    123
    משתתף
    כאשר אני מבצע עדכון לפי LINE ולא לפי TEXT3 (ב TEXT3 אני מאחסן את PARTNAME) אז כל שורה מקבלת מספר בסדר רץ. זה היה טוב לי אם לא היו לי כפילויות שמק"ט יכול להופיע יותר מפעם אחת (הכפילות נובעת בגלל הכפלה עם טבלת מיקומים).

    בסופו של דבר זו התוצאה שאני מצפה לה אחרי עדכון GENERALLOAD:

    TEXT3 INT6

    CAP10002 1
    CAP10002 1
    CAP10003 2
    ICI10058 3
    ICI10058 3
    RES10005 4
    RES10005 4
    RES10005 4
    RES10005 4

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

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

    TEXT3 INT6

    CAP10002 1
    CAP10002 1
    CAP10003 3
    ICI10058 4
    ICI10058 4
    RES10005 6
    RES10005 6
    RES10005 6
    RES10005 6

    Gabby
    משתתף
    הבנתי.

    אם כך, מה שאתה צריך לשנות הוא רק את ה-SELECT בשאילתא של ה-CURSOR.
    שלוף את עמודת המק"ט בלבד.

    *שים לב רק להוסיף DISTINCT אחרי ה-SELECT

    זה אמור לסדר

    123
    משתתף
    גבי הרבה תודה ! עובד מצויין.

    שכחתי מקיומו של DISTINCT !

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