שאילתה להפחתה

eyal7773

New member
שאילתה להפחתה

שלום,

יש לי טבלה עם שורות הסכם

קוד מוצר , עמלה 1, עמלה 2, עמלה 3 וכן הלאה....

ואני רוצה להציג למשתמש הפרש בין שורות שונות בטבלה (נניח בין שורה עם ID=1

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

-----------------------------
הצורה שחשבתי עליה :
----------------------------
1. יש לי 2 מספרי ID של הרשומות
2. שאילתא אחת - שולפת את הרשומה הראשונה
3. שאילתא שניה - שולפת את הרשומה השניה - תוך כדי הכפלת השדות במינוס אחד
4. שאילתא שלישית - עושה SUM של שתי השאילתות הקודמות.


יש צורה יותר פשוטה ?
 

pitoach

New member
DDL+DML אייל ולא סיפורים


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

* על פני השטח במבט ראשוני ובלי שום מידע ברגע שאני רואה את זה:
קוד מוצר , עמלה 1, עמלה 2, עמלה 3 וכן הלאה....
אני יכול להניח שיש כאן בעיה ל תכנון וארכיטקטורה של מסד הנתונים!
מה זה "וכן הלאה"?!?
היום יש לך 10 עמודות של "עמלה 1" עד "עמלה 10"
מה אם מחר תירצה להוסיף אפשרות ל"עמלה 11"?!? אתה תשנה את מבנה מסד הנתונים שלך ותוסיף טור? אם כן אז מדובר בתכנון שצריך לשפר.

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

pitoach

New member
דרך אגב זו דוגמה מעולה לחשיבות גרסת השרת

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

בכל מקרה אין הגיון ואין צורך בשימוש ביותר משאילתה אחת.
 

eyal7773

New member
תיאור מפורט יותר

אוקי,
אין לי DDL/DML כי הדאטאבייס בבניה
אז ראיתי את התגובה שלך בערב, והחלטתי לחכות בשלב זה לתשובות
אז אני אנסה לתאר זאת באמצעות תמונה מצורפת

1. אני עובד עם MySql
2. יש לי טבלת הסכמים עם סוכנים
3. כל סוכן מוכר דרכי מוצרים שונים, של חברות שונות - וכאן אני מתעד זאת בטבלת "שורות הסכם" - כל שורה מתעדת את העמלות שהוא מקבל עבור מכירת מוצר מסוים של חברת מסוימת
4. יש לי מספר סוגי עמלות, כל עמלה נספרת למספר שונה של שנים, יש עמלות ל-5 שנים, ויש עמלות ל-30 שנה.

המספרים 1, 2 , 3 מציינים שנים..., תקופות, בכל תקופה - עמלה שונה.

תיאורטית - את העמלה של שמגיעה עד 30 שנה, יכולה להגיע גם ל-50, אבל אף אחד לא מתעד את זה, וזה לא חשוב למשתמשים.

חשבתי הרבה האם לעשות זאת "שטוח" או "יחיד לרבים"
המסקנה שלי בסוף הייתה לפי השימושים שלי -
1. שימוש 1 - אני רוצה להציג את כל העמלות בשורה, וב-MySql אין Transpose מובנה
2. שימוש 2 - אני רוצה להפחית את כל העמלות מרשומה X, מכל העמלות מרשומה Y ולהציג את ההפרשים בינהם.
שלישית - אין לי ערך אמיתי ל- יחיד לרבים פה, כי המשמעות של מספר התקופה - משתנה בהתאם לחישובים שונים (תלוי מתי המוצר נמכר).

בגלל השימושים - חשבתי לעשות זאת שטוח.

אשמח לדעתכם...
 

pitoach

New member
שלום אייל

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


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


השלב הבא אחרי זיהוי האלמטים הוא בדרך כלל זיהוי הקשרים בין האלמנטים השונים. מכאן יגעו הקשרים בין הטבלאות.

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

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