1
ApptStart
2005-02-18 10:00:00.000
2005-02-18 13:00:00.000
2005-02-18 11:00:00.000
2005-02-21 09:00:00.000
2005-02-18 15:30:00.000
2005-02-18 14:30:00.000
.
.
.

データベースに上記のような列があります。特定のドキュメントのその月の予約をカウントしたい。金曜日はほとんどが半日勤務です。そのため、金曜日は午前中のみの予定でカウントしたくありません。予定が午後にある場合、12:00:00.000 以降、その日を個別のカウントに含めたいと思います。

これまでのところ、私は持っています:

SELECT
   ScheduleDays = count(distinct CONVERT(datetime, convert(char(12), a.ApptStart, 1)))
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 on doctor
    a.ResourceID in (201)

これは、予定のある毎日を数えたときに機能しましたが、前述のように、その半日を除外する必要があるため、の最後の右文字のみを見てApptStart、個別のケースで x > 正午を比較することを考えていましたカウント...

次のことを試しましたが、うまくいきませんでした。

ScheduleDays = count(distinct case when (Right(a.ApptStart, 12)) > '12:00:00:000' then 1 else 0 END)

前もって感謝します!

私が試した編集:

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 with an hour > 12.
 DATENAME(weekday, a.ApptStart) <> 'Friday' OR DATEPART(hour, a.ApptStart) > 12 AND
--Filter on doctor
a.ResourceID in (201)

カウントとして1808年

4

1 に答える 1