[英]SQL Server 2008 Count(Distinct CASE?
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)
此查詢將查看約會開始時間而不計算星期五,因為我們的文檔僅在星期五工作半天。 有人告訴我,我們確實想要計算它們,但只有半天(第一次我被告知排除它們大聲笑)。
有人可以幫我一個案例陳述,這個陳述將計算在周六12點之后沒有預約的星期五半天嗎? 我相信它必須進入ScheduleDays=COUNT(DISTINCT(CAST(datediff(d,0,a.ApptStart) as datetime)))
。 也許我們可以把星期五和之后的12個過濾器放在那里,而不是在where子句中,如果我們要使用案例的話。 ScheduleDays=COUNT(DISTINCT CASE WHEN etc
。我非常感謝幫助。
你無法用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
轉換為datetime
的簡單語法。
編輯:
小時檢查:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.