האופרטור Values

26/07/2011

איציק בן-גן מציג מדי פעם כל מיני טריקים שגורמים לי להיאנח- למה אני לא המצאתי את זה בעצמי? כשאגדל אני רוצה להיות אב"ג! הנה דוגמה לטריק שכזה, בעיבוד שלי- נתונה טבלת מכירות של סוכנים לפי שנים: Use tempdb; Go   If Object_Id('T_Mehirot','U') Is Not Null Drop Table T_Mehirot ...
תגיות: ,
אין תגובות

ביצוע Count Distinct ללא תמיכה מתאימה

22/07/2011

נשאלתי בפורום בסיסי נתונים בתפוז כיצד לבצע Count Distinct באקסס, כלי שאינו תומך באופציה זו. אנחנו אנשי SQL Server יכולים להריץ בקלות שאילתה בסגנון של- Select Schema_id, Count(Distinct Type) Count_Dist_Type From sys.objects Group By Schema_id; שאילתה הסופרת כמה סוגים שונים של אובייקטים יש בכל סכימה (למשל- בסכימה 4=sys יש שני סוגים- INTERNAL_TABLE, SYSTEM_TABLE). אם בבוקר אחד נגלה שמישהו הזיז את ה-Count distinct שלנו וכעת עלינו...
אין תגובות

Execute As User/Login

19/07/2011

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

ביצוע Lag (או Lead) תוך פניה אחת לטבלה

17/07/2011

פונקציות Lag ו-Lead עדיין אינן קיימות ב-SQL Server, אם כי ב-Oracle הן כבר אזרחיות ותיקות: הן מאפשרות לפנות מתוך רשומה לזו שלפניה (Lag) או לזו שאחריה (Lead), פעולה שהיא חיונית בשליפות המתארות סדרות נתונים לאורך זמן (שערי חליפין, סיכומים תקופתיים..) בהן אנו נדרשים להציג את השינוי באחוזים לעומת התקופה הקודמת. פעולה די טריוויאלית בסביבה עסקית, אולם בכלים הקיימים כיום ב-TSQL - יש לבצע שליפות מסובכות יחסית ולא כל כך יעילות הכוללות מספר פניות לטבלה (למשל- Join של הטבלה עם עצמה כך שלכל רשומה מהטבלה האחת מותאמת הרשומה הקודמת מהטבלה השנייה). עסקתי בנושא הזה מספר פעמים בעבר: ...
אין תגובות

כמה ימי ראשון יש בתקופה זמן נתונה?

12/07/2011

איתי בנימין כתב פוסט עם הצעה לפתרון שמתבססת על שימוש בטבלת מספרים שמתייחסים אליהם כאל התאריכים בין ההתחלה והסיום של התקופה, ובעזרת Group By מבצעים Count על ימי ראשון אותם ניתן לזהות בעזרת פונקצית תאריך מתאימה. כבר מהתגובה של רונן ניתן ללמוד שיש בוודאי דרך פשוטה יותר, ועם מעט אינטואיציה די ברור שמספר ימי הראשון בתקופה נתונה הוא בערך כמספר השבועות, שכן בכל שבוע יש יום ראשון אחד, ורק צריך למצוא פתרון אלגנטי כדי לדעת אם צריך להוסיף או לגרוע 1 מהתוצאה - תלוי מתי התקופה התחילה ומתי הסתיימה. כעקרון התאריכים ב-SQL Server הם מספרים שלמים, כאשר...
אין תגובות