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 Я хочу, чтобы включить в этот день в отчетливом графеSQL Server 2008 Count (Distinct?
до сих пор у меня есть:.
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)
Заранее благодарен!
EDIT Я попытался:
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 как кол
Что вы имеете в виду, когда вы говорите, что ваш код «А не было» т работы "? Какие результаты вы получили? Или вы получили сообщение об ошибке? –
Я имею в виду, что это только вернуло 1 встречу .. это должно было быть меньше, чем 16 для этого частного документа за этот месяц, так как 16 - это счет, прежде чем я попытался избавиться от пятнадцати дней. EDIT Я только что считал, что он должен вернуться 12. – user2588088
Вы считаете уникальные результаты операторов case, единственными результатами которых могут быть 1 или 0, тогда счетчик может быть только в диапазоне от 0 до 2. – bendataclear