דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. גרופ בי מרובה אפשרויות SQL SERVER

גרופ בי מרובה אפשרויות SQL SERVER

מתוזמן נעוץ נעול הועבר ארכיון code613m
7 פוסטים 3 כותבים 435 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • א מנותק
    א מנותק
    ארכיטקט
    כתב ב נערך לאחרונה על ידי
    #1

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

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

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

    פורסם במקור בפורום CODE613 ב27/10/2014 12:30 (+02:00)

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

    תגובה 1 תגובה אחרונה
    0
    • S מנותק
      S מנותק
      softs
      כתב ב נערך לאחרונה על ידי
      #2

      משהו כזה?

      SELECT  Creator, 
      		SUM(CASE WHEN CAST(CreateDate AS DATE) > CAST(GETDATE() AS DATE) THEN TotalSC ELSE 0 END) AS Future,
      		SUM(CASE WHEN CAST(CreateDate AS DATE) <= CAST(GETDATE() AS DATE) THEN TotalSC ELSE 0 END) AS Past
      FROM PO_Header
      GROUP BY Creator
      

      פורסם במקור בפורום CODE613 ב27/10/2014 12:48 (+02:00)

      תגובה 1 תגובה אחרונה
      1
      • dovidD מנותק
        dovidD מנותק
        dovid ניהול
        כתב ב נערך לאחרונה על ידי
        #3

        מה הDB אשם שאתה מנסה להוציא ממנו מצגת 🙂

        פורסם במקור בפורום CODE613 ב27/10/2014 12:49 (+02:00)

        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

        בכל נושא אפשר ליצור קשר dovid@tchumim.com

        תגובה 1 תגובה אחרונה
        0
        • א מנותק
          א מנותק
          ארכיטקט
          כתב ב נערך לאחרונה על ידי
          #4

          @softs

          משהו כזה?

          SELECT  Creator, 
          		SUM(CASE WHEN CAST(CreateDate AS DATE) > CAST(GETDATE() AS DATE) THEN TotalSC ELSE 0 END) AS Future,
          		SUM(CASE WHEN CAST(CreateDate AS DATE) <= CAST(GETDATE() AS DATE) THEN TotalSC ELSE 0 END) AS Past
          FROM PO_Header
          GROUP BY Creator
          

          רעיון מעולה!!! לא חשבתי להשתמש בזה.

          תראה את תחילת הפרוצדורה ותבין כמה קוד חסכת לי (75%!!)

          -- הצהרה על הטבלה המרכזית שאמורה להיות מוחזרת בסוף הפרוצדורה
          	declare @table table (UserID int, DataType nvarchar(50),
          							ThisDay float default 0,ThisWeek float default 0,ThisMonth float default 0,LastMonth float default 0,
          							 Comment nvarchar (500));
          	-- טבלת משתמשים אלו משתמשים יש להכניס לטבלה במידה ונבחר משתמש 0 יוכנסו כל המשתמשים שבתוכנה לטבלה
          	declare @usersTable table (UserID int);
          	insert into @usersTable select ContactID from Users where ContactID = @userID or @userID=0;
          	-- טבלה שמרכזת את כל סוגי הנתונים שנרצה להכניס לטבלה
          	declare @DataTypeTable table (DataType nvarchar(50));
          	insert into @DataTypeTable
          	values('שעות עבודה'),('יצירת תיקים'),('ביקור בכרטיסים'),
          	('יצירת כרטיסים'),('שיחות טלפון'),('משימות לחזור ללקוחות'),
          	('המתנה למסמכים'),('העברה לבתיה'),('ימי עבודה'),
          	('הכנסות לפי פרודוקציה'),('סכום הגשה להחזר'),('יחס שעות תיקים'),
          	('יחס שעות הכנסות');
          	-- מכניס את כל סוגי הנתונים לטבלה עם היוזרים
          	insert into @table (userID,DataType)
          	select UserID, DataType from @usersTable, @DataTypeTable;
          	
          
          	--					============================ שעות עבודה ============================
          	update @table 
          	set 
          	ThisDay = a.ThisDay ,
          	ThisWeek = a.ThisWeek,
          	ThisMonth = a.ThisMonth,
          	LastMonth = a.LastMonth
          	from
          	(select UserID,
          			SUM(CASE WHEN dbo.Queries_GetDateWhere([StartTime],'ThisDay') = 1 THEN (datediff(SECOND,[StartTime],isnull([EndTime],getdate()))/60.0/60.0) ELSE 0 END) AS ThisDay,
          			SUM(CASE WHEN dbo.Queries_GetDateWhere([StartTime],'ThisWeek') = 1 THEN (datediff(SECOND,[StartTime],isnull([EndTime],getdate()))/60.0/60.0) ELSE 0 END) AS ThisWeek,
          			SUM(CASE WHEN dbo.Queries_GetDateWhere([StartTime],'ThisMonth') = 1 THEN (datediff(SECOND,[StartTime],isnull([EndTime],getdate()))/60.0/60.0) ELSE 0 END) AS ThisMonth,
          			SUM(CASE WHEN dbo.Queries_GetDateWhere([StartTime],'LastMonth') = 1 THEN (datediff(SECOND,[StartTime],isnull([EndTime],getdate()))/60.0/60.0) ELSE 0 END) AS LastMonth
          		from UsersWorkingHoursRepoet
          		group by UserID) a inner join @table t on t.UserID= a.UserID
          		where t.DataType='שעות עבודה';
          

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

          פורסם במקור בפורום CODE613 ב27/10/2014 14:47 (+02:00)

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

          תגובה 1 תגובה אחרונה
          0
          • א מנותק
            א מנותק
            ארכיטקט
            כתב ב נערך לאחרונה על ידי
            #5

            הסתבכתי במקרה הבא כאשר מדובר בשאילתה מקוננת:

            select count(*) ,s.UserID  from
            (select distinct RowID,UserID 
            from ScreenTimer 
            where formName='Contacts') as s
             group by s.UserID
            

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

            פורסם במקור בפורום CODE613 ב27/10/2014 15:25 (+02:00)

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

            תגובה 1 תגובה אחרונה
            0
            • S מנותק
              S מנותק
              softs
              כתב ב נערך לאחרונה על ידי
              #6

              לא ממש ירדתי לסוף דעתך אבל ברפרוף נ"ל שהתחביר של Count+Distinct יעשה לך טוב

              SELECT COUNT(DISTINCT EmailAddress), -- Count unique Emails
              	   COUNT(DISTINCT EmailAddress + ';' + CampaignID), -- Same with two columns
              	   COUNT(DISTINCT (CASE WHEN CampaignID = 68 THEN EmailAddress END))  -- Count unique Emails for specific campaign
              FROM BatchInfoView
              

              פורסם במקור בפורום CODE613 ב28/10/2014 00:20 (+02:00)

              תגובה 1 תגובה אחרונה
              1
              • א מנותק
                א מנותק
                ארכיטקט
                כתב ב נערך לאחרונה על ידי
                #7

                עובד מדהים, בדיוק מה שחיפשתי שנים!!

                פורסם במקור בפורום CODE613 ב28/10/2014 09:54 (+02:00)

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

                תגובה 1 תגובה אחרונה
                0

                בא תתחבר לדף היומי!
                • התחברות

                • אין לך חשבון עדיין? הרשמה

                • התחברו או הירשמו כדי לחפש.
                • פוסט ראשון
                  פוסט אחרון
                0
                • דף הבית
                • קטגוריות
                • פוסטים אחרונים
                • משתמשים
                • חיפוש
                • חוקי הפורום