דוח הזמנות כפולות

פורומים אפיון ופיתוח פריוריטי דוח הזמנות כפולות

  • Post
    sava
    משתתף
    היי,

    אשמח לעצה איך לבנות דוח הזמנות כפולות שיחפש נניח בכל ההזמנות עד שבוע אחורה נתונים דומים:

    אותו לקוח, אותם מוצרים ואותם כמויות.

    ניסיתי לבנות פרוצ' עם קרסור בתוך קרסור אבל זה הרבה יותר מסובך או שאני מסבכת את זה

    אז אשמח לעצה לדרך הטובה ביותר לבנות דוח זה

    תודה מראש

מוצגות 15 תגובות – 1 עד 15 (מתוך 15 סה״כ)
  • Replies
    yitzchok
    משתתף
    IL
    קודם כל שאילתא עם קיבוץ מתאים ו- having count  גדול מ-1

    ולפי מה שיוצא מציגים את הפרטים (אני מניח שתרצו לראות אותם)

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

    אני צריכה לקבל רק הזמנות שכל הפריטים הנמצאים בה קיימים גם בהזמנה אחרת

    yitzchok
    משתתף
    IL
    אז מה שעשית כבר זה בסיס לזה

    יש לך רשימה של לקוח+מוצר+כמות כאשר אותו צירוף קיים יותר מפעם אחת (או ביותר מהזמנה אחת בעזרת COUNT(DISTINCT ORD)

    מזה את יכולה לחזור וליצור רשימה של לקוח+מוצר+כמות+ORD

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

    הרשאון בעזרת EXISTS השני בעזרת NOT EXISTS או אולי NOT IN לדוגמה שה-ORD לא נמצא ברשימה של ORD מתוך ORDERITEMS (בתיתוך ל-ORDERS אחר כדי להשיג את הלקוח?) כאשר אלה לא נמצאים ברשימה הנ"ל. אבל יכול להיות שהשאילתא העלונה כבר על ORDERITEMS ו-ORDERS ואת עושה DISTINCT כדי לקבל כל הזמנה רק פעם אחת.

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

    מסכמת מה שעשיתי בסוף:

    רצתי על כל ההזמנות שמס' הלקוח וכמות הפריטים בהזמנה שווה בעזרת HAVING COUNT גדול מ-2

    ואז רצתי בקרסור על כל הפריטים שבהזמנות שנשארו ושוב כאשר HAVING COUNT  גדול מ-2

    כפי הנראה התוצאה נכונה

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

    איך אפשר בלי קרסור? יש מצב אתה כותב לי את זה אם זה קצר?

    NoamN
    משתתף
    none
    תנסי את השאילתא הזו

    SELECT O1.ORDNAME, O2.ORDNAME
    FROM ORDERS O1, ORDERITEMS OI1, ORDERS O2
    WHERE O1.ORD = OI1.ORD
    AND O1.CURDATE >= SQL.DATE8 – 7*24:00
    AND O2.CURDATE >= SQL.DATE8 – 7*24:00
    AND O1.CUST = O2.CUST
    AND EXISTS (SELECT 1 FROM ORDERITEMS OI2
    WHERE OI2.PART = OI1.PART
    AND OI2.QUANT = OI1.QUANT)
    AND O1.CUST > 0
    AND OI1.ORDI > 0
    FORMAT;

    • התגובה הזו עודכנה לפני לפני 3 שנים, 6 חודשים ע"י NoamN.
    • התגובה הזו עודכנה לפני לפני 3 שנים, 6 חודשים ע"י NoamN.
    NoamN
    משתתף
    none
    תוסיפי לשאילתא AND O1.ORD <> O2.ORD
    yitzchok
    משתתף
    IL
    סליחה לי אישית אין זמן כרגע לרדת לרזולוציה הזאת

    נעם שים לב למה שנכתב ב5 וב8 במאי למעלה. אני לא חושב שהשאילתא שלך נותנת מענה לבקשה.

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

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

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

    sava
    משתתף
    תודה רבה רבה לך נועם

    עשיתי עם קרסור אחד וכפי הנראה התוצאה טובה 🙂

    yitzchok
    משתתף
    IL
    ראשית כל אתם יכולים לעבוד עם קורסורים אם אתם רוצים.

    אני רק רציתי להגיד שלדעתי עדיף בלי, בסופו של דבר משלמים מחיר – לפעמים מאד גבוה – בביצועים.

    אני מאמין שרוב מה שאומרים עליו "ניתן רק בקורסור" ניתן גם בסטים, ויותר יעיל, גם אם צריכים לבצע כמה שלבים של הכנה.

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

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

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

    הזמנה כפולה היא הזמנה ששווה אחד על אחד בלקוח, פריטים וכמויות

    yitzchok
    משתתף
    IL
    יכול להיות שמה שהצעתי שם לא מספיק לענות על דרישה זאת.

    אני הבנתי שרצית "רק הזמנות שכל הפריטים הנמצאים בה קיימים גם בהזמנה אחרת" …כלשיא… ואת רוצה שכולם יהיו גם באותה הזמנה אחרת

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

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

    הצלחתי לכתוב את זה ללא קרסור

    תודה ענקית!

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