איחוד שני חישובים

פורומים אפיון ופיתוח פריוריטי איחוד שני חישובים

  • Post
    אלמוני
    אורח
    שלום,
    אני צריך לחשב צריכת פריטים 0-3 חודשים ו-3-6 חודשים.
    כתבתי את הקוד הבא:
    /* calculate 0-3 months */
    :TDT = SQL.DATE8 ;
    :FDT = 01/01/11 ;
    :FDT = :TDT – (1440 * 90) ;
    INSERT INTO STACK4 (KEY,REALDATA)
    SELECT P.PART, SUM(T.TQUANT) / 1000.0
    FROM PART P, TRANSORDER T
    WHERE T.PART = P.PART
    AND T.TYPE = 'K'
    AND T.CURDATE BETWEEN :FDT AND :TDT
    GROUP BY 1 ;
    /* calculate 3-6 months */
    :TDT = :FDT ;
    :FDT = :TDT – (1440 * 90) ;
    INSERT INTO STACK4 (KEY,REALDATA2)
    SELECT P.PART, SUM(T.TQUANT) / 1000.0
    FROM PART P, TRANSORDER T, STACK4
    WHERE T.PART = P.PART
    AND T.TYPE = 'K'
    AND T.CURDATE BETWEEN :FDT AND :TDT
    GROUP BY 1;
    אך הקטע השני לצערי לא עובד.. אני יודע שאני צריך להחליף אותו ככל הנראה ל- UPDATE אבל כל הניסיונות כשלו.
    אשמח לעזרה

    תודה
    חייצוק

מוצגות 1 תגובות (מתוך 1 סה״כ)
  • Replies
    Lior
    מנהל בפורום
    הי חי
    מכיון ש KEY הוא מפתח על STACK4 ואחרי ה SELECT הראשון כבר קיימות רשומות בתוך הטבלה, ה SELECT השני שמנסה להכניס את אותם מק"טים נופל

    אפשר לעשות את זה על ידי בכמה אופנים:
    1. CURSOR שרץ בלופ ועושה UPDATE – זמן ריצה ארוך לינארי לכמות הפריטים
    2. INSERT שני לתוך טבלה אחרת ו טבלה שלישית שמקבלת את ה JOIN של שתי הטבלאות – הרבה קוד
    3. SELECT בודד שמשתמש בתנאים:
    כך נניח שהתאריכים שלך יושבים בשלושה משתנים D1 D2 ו D3
    לפי המקטעים שאתה בודק (היום, לפני שלושה חודשים ולפני חצי שנה)
    כך נראת השאילתה:
    INSERT INTO STACK4 (KEY, REALDATA, REALDATA2)
    SELECT P.PART,
    SUM((T.CURDATE BETWEEN :D1 AND :D2 ? REALQUANT(TRANSORDER.TQUANT) : 0.0)),
    SUM((T.CURDATE BETWEEN :D2 + 1 AND :D3 ? REALQUANT(TRANSORDER.TQUANT) : 0.0))
    FROM PART P, TRANSORDER T
    WHERE T.PART = P.PART
    AND T.TYPE = 'K'
    AND T.CURDATE BETWEEN :D1 AND :D3
    GROUP BY 1
    ;

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