01-05-2009, 15:20
|
|
|
חבר מתאריך: 13.02.09
הודעות: 365
|
|
זה לא לגמרי פשוט אבל יש פתרון בית ספר. החל ב 2005 הכניסה מיקרוסופט יכולות של pivot ושל unpivot שמטפלות בצורך כמו שלך: pivot לוקח טבלה מנורמלת ויוצר תוצאה לא מנורמלת. unpivot עושה בדיוק ההפך.
לדוגמא - ניקח טבלה שמכילה שמות שחקנים ומספר הגולים שהבקיעו בכל שנה:
קוד PHP:
create table points ( player_id nvarchar(100), points_2007 int, points_2008 int, points_2009 int, )
נמלא אותה נתונים, למשל:
קוד PHP:
player_id points_2007 points_2008 points_2009 --------- ----------- ----------- ---------- player_1 12 8 10 player_2 6 12 9
עכשיו ננסח את שאילתת ה unpivot:
קוד PHP:
select player_id, at_year, annual_points from points unpivot (annual_points for at_year in (points_2007, points_2008, points_2009)) as my_normalized
וזו התוצאה שנקבל:
קוד PHP:
player_id at_year annual_points --------- ------- ------------- player_1 points_2007 12 player_1 points_2008 8 player_1 points_2009 10 player_2 points_2007 6 player_2 points_2008 12 player_2 points_2009 9
על זה כבר אפשר להפעיל את AVG ודומיו. נכון, בשאילתת ה unpivot צריך לפרט את כל העמודות. מצד שני אתה יכול לשמור את השאילתא כ view במסד הנתונים ועליה לבצע בעתיד כל פעולה שתרצה - כאילו הטבלה מנורמלת.
|