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)

このクエリは予定の開始時刻を調べますが、ドキュメントは金曜日に半日しか機能しないため、金曜日はカウントしません。カウントしたいと言われましたが、半日だけです(最初は除外するように言われました笑)。

午後 12 時以降に予定のない金曜日を半日としてカウントする Case ステートメントについて、誰か助けていただけませんか? に入る必要があると思いますScheduleDays=COUNT(DISTINCT(CAST(datediff(d,0,a.ApptStart) as datetime)))。とにかくケースを使用する場合は、where 句の代わりに Friday と after 12 フィルターをそこに入れることができます。ScheduleDays=COUNT(DISTINCT CASE WHEN etc. 本当に助かります。

4

1 に答える 1

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

ドキュメントが金曜日に半日しか機能しない場合は、予約の時間を確認する必要はないと思います. もちろん、必要に応じて 2 番目の に追加することもできます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
于 2013-07-17T14:32:12.170 に答える