繁体   English   中英

SQL Server 2008 Count(Distinct CASE?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM