בעיית sql מורכב

SleepingDog

New member
בעיית sql מורכב

אולי הבעייה הבאה נשמעת מוזר אבל אני דווקא צריך את הפתרון שלה לצורך בדיקה לניסוי מסויים. פישטתי את הבעייה לטבלאות פשוטות של בי"ס ושמות לצורך המחשת הבעייה. מה יש לי ? טבלת ב"יס [School]: schoolId - מפתח ראשי SchoolName - שם הבי"ס TypeId - סוג הבי"ס, 1 - תיכון, 2 - חטיבה, 3 - יסודי. וטבלת שמות - [Names]: SchoolId - הבי"ס אליו משוייך המורה. NameId - מפתח ראשי. FirstName - שם פרטי - אפשר להתעלם. LastName - שם משפחה - חשובה לנו האות הראשונה שלו. הנחת יסוד ששם לא חוזר פעמיים אך לא משמעותי. בהתחלה הייתי צריך טבלה שמראה לי לכל אות בא"ב שיש בה שמות משפחה את כמות המורים לפי סוג הבי"ס כלומר שדה אות שדה תיכון המראה את הסה"כ של מורים באות הזאת בבי"ס תיכון, שדה חטיבה המראה את בה"כ המורים בחטיבות באות הזאת... וכן הלאה. לצורך זה בניתי שאילתת עזר מהצורה הבאה ונתתי לה את השם Letters1: SELECT Left(LastName,1) AS Letter, Names.SchoolID FROM Names GROUP BY Left(LastName,1), Names.SchoolID HAVING (((Count(Answers.AnswerID))>0)); והשאילתא העיקרית: SELECT Letters1.Letter, Sum(IIf([TypeId]=1,1,0)) AS Type1, Sum(IIf([TypeId]=2,1,0)) AS Type2, Sum(IIf([TypeId]=3,1,0)) AS Type3 FROM Schools INNER JOIN Letters1 ON Schools.SchoolID = Letters1.SchoolID GROUP BY Letters1.Letter; עכשיו אני צריך לדעת דבר מסובך הרבה יותר, שאילתה המחזירה את כל צמדי האותיות X וY כאותיות ראשונות של שם משפחה, כלשהם אבל ספיציפיים כלומר לגבי כל הצרופים האפשריים, אשר מקיימים כלומר יש להם: לפחות בי"ס אחד מסוג 1 (תיכון) אשר יש בו שמות המתחילים גם בX וגם בY לפחות 3 בי"ס מסוג 2 (חטיבה) אשר יש בו שמות המתחילים גם בX וגם בY לפחות 6 בי"ס מסוג 3 (יסודי) אשר יש בו שמות המתחילים גם בX וגם בY לפחות עוד בי"ס אחד מסוג 1 אשר יש בו שמות המתחילים בX לפחות עוד 3 בי"ס מסוג 2 אשר יש בו שמות המתחילים בX לפחות עוד 6 בי"ס מסוג3 אשר יש בו שמות המתחילים בX אפשרות שחשבתי עליה בתור הטבלה הסופית תכיל את השדות LetterX,LetterY - ברור Type1XnotY - סה"כ של בי"ס בדומה לשאילתה הקודמת שעשיתי sum(iif)... Type2XnotY - כנ"ל מציג את סה"כ בהי"ס שיש לבם שמות רק באות הראשונה ולא בשנייה מסוג חטיבה Type3XnotY - כנ"ל Type1XandY - זה עונה על התנאי הראשון אם גדול או שווה ל 1 Type2XandY - זה עונה על התנאי שני אם גדול או שווהל 2 Type3XandY - ....כנ"ל את התנאי 4 אפשר יהיה לבדוק אם סכום הערכים בשדה הראשון ובשדה הרביעי יהיה גדול שוה ל 2 את התנאים 5 אפשר יהיה לבדוק אם סכום הערכים בשדה השני ובשדה החמישי יהיה גדול שוה ל 6 וכן הלאה. יש למישהו רעיון האם זה הכיוון , אם כן איך ליישם אותו ואם לא אז מה הכיוון?
 

גרי רשף

New member
עם כל הרצון הטוב..../images/Emo22.gif

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

SleepingDog

New member
פישוט הבעייה

תודה על הזמן של מי שהשקיע בנסיון להבין את הבעייה אני מקווה שההסבר הבא יותר פשוט: נתונות הטבלאות: Schools: SchoolID (PK, Identity), SchoolName (Text 30), SchoolType (FK) Teachers: TeacherID (PK, Identity), SchoolID (FK), LastName (Text 17), FirstName (Text 17) SchoolTypes: SchoolType(PK,Identity), TypeName (Text 15) טבלה זאת מכילה 3 רשומות עם ID 1, 2 ו3. צריך משפט sql שיראה לכל צרוף אפשרי של שתי אותיות שבהן מתחילים שמות משפחה (LastName) כמה בה"יס יש בכל סוג בי"ס לדוגמה אם השדות בטבלה יהיו letterX, letterY, Type1, Type2, Type3. רשומה לדוגמה תכיל את הערכים: “A”, “B”, 0 , 7, 2 ומשמעותה של הרשומה תהיה שאין אף בי"ס מסוג 1 שיש בו גם מורים ששם משפחתם מתחיל ב "A" ןב "B”, 7 בי"ס מסוג 2 שיש בכל אחד מהם גם מורים ששם משפחתם מתחיל ב "A” וגם מורים ששם משפחתם מתחיל באות "B”, ו 2 ביה"ס מסוג 3 שיש בכל אחד מהם גם מורים ששם משפחתם מתחיל ב "A” וגם מורים ששם משפחתם מתחיל באות "B”. איך אפשר לגשת ליצירת sql כזה (מהו...) תודה מראש, ומקווה שהפעם השאלה יותר ברורה.
 
למעלה