2013-07-17 58 views
1
SELECT  
    ScheduleDays = COUNT(DISTINCT(CAST(datediff(d, 0, a.ApptStart) AS datetime))) 
FROM 
    Appointments a 
WHERE 
    ApptKind = 1 AND 
    --filter on current month 
    a.ApptStart >= ISNULL(DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0),'1/1/1900') AND 
    a.ApptStart < ISNULL(DATEADD(month, DATEDIFF(month, 0, GETDATE())+1, 0),'1/1/3000')AND 
    --filter all days that aren't Friday, and then give you all Fridays that have an hour > 12. 
    DATENAME(weekday, a.ApptStart) <> 'Friday' and DATEPART(hour, a.ApptStart) > 12 AND 
    --Filter on doctor 
    a.ResourceID in (201) 

這個查詢將尋找通過預約開始時間和不計星期五作爲我們的文檔只工作在週五半天。有人告訴我,我們要指望他們,但只(我第一次被告知要排除他們哈哈)SQL Server 2008的計數(不同呢?

有人可以請求幫助我一個案例聲明,將計數週五沒有預約後12noon,半天?我相信它將不得不在ScheduleDays=COUNT(DISTINCT(CAST(datediff(d,0,a.ApptStart) as datetime)))。也許我們可以把星期五和之後的12個過濾器放在那裏,而不是在where子句中,如果我們打算使用case。ScheduleDays=COUNT(DISTINCT CASE WHEN etc。我真的很感謝幫助。

+1

您發佈的查詢返回當前的月份,其中一個醫生有預約時間是不是在週五下午的天數。不計算星期五的約會,也不計算早上的約會。你是否要求提供同樣預約計數的查詢,但是隻有在中午之前預約是在星期五,還是在其他時間的任何時間? –

+0

嗯,你可以告訴我這個SQL的新東西。我希望它能夠計算所有有約會的日子。如果星期五早上只有約會(中午截止),那麼我們將它算作半天。這裏的想法是將文檔預約的天數和計入星期五的天數返回爲半天。我們將用它來爲他們設定基準。 – user2588088

+0

你能否提出一個更好,更具描述性的標題?它看起來像是一個可能對其他用戶有用的問題,如果因爲標題而無法找到它們,那將是一種恥辱:-) – Josien

回答

3

你不能用count來真正計數一半的東西,所以這是不行的。但是,你可以用算術來做。我覺得是這樣的:

select (count(distinct (case when DATENAME(weekday, a.ApptStart) <> 'Friday' 
          then cast(a.apptstart as date) 
         end) 
      ) + 
     0.5 * count(distinct (case when DATENAME(weekday, a.ApptStart) = 'Friday' 
            then cast(a.apptstart as date) 
           end) 
        ) 
     ) as ScheduleDays 

如果該文檔僅在週五工作半天,我不認爲你需要檢查的預約時間。當然,如果你願意,可以加入第二個count

請注意,爲了計算天數,我使用了將datetime轉換爲date的更簡單的語法。

編輯:

隨着時間的檢查:

select (count(distinct (case when DATENAME(weekday, a.ApptStart) <> 'Friday' 
          then cast(a.apptstart as date) 
         end) 
      ) + 
     0.5 * count(distinct (case when DATENAME(weekday, a.ApptStart) = 'Friday' and DATEPART(hour, a.ApptStart) <= 12 
            then cast(a.apptstart as date) 
           end) 
        ) 
     ) as ScheduleDays 
+0

哈哈有些人!這很有道理。如果我想添加檢查時間,我會在='Friday'_________之後添加它。然後等等。DATEPART(hour,a.ApptStart)> 12。哪裏適用於='星期五'和> 12? – user2588088

+0

戈登非常感謝你的幫助! – user2588088