Использование SQLServer 2008
В настоящее время у меня есть функция, которая реализует функциональность, как показано ниже (хотя в функции есть переменные, которые я только что заполнил здесь, чтобы дать лучшее представление о том, чтовходные данные могут быть как).
Мне было интересно, есть ли способ, когда вы определяете @id
как ноль (в настоящее время используется в Coalesce на v.ID), чтобы соответствовать всем, как если бы вы не имелиопределил его в выражениях select / group by?
SELECT
'ALL' as GeogType,
CAST(v.AdmissionOn as date) as dtAdmission,
(DATEPART(hour,CAST(AdmissionOn as time)))/(24/1) as timeInterval,
CAST((DATEPART(hour,CAST(AdmissionOn as time)))/(24/1) * (24/1) as nvarchar) + ':00' as fromTime,
CAST((DATEPART(hour,CAST(AdmissionOn as time)))/(24/1) * (24/1) + (24/1) as nvarchar) + ':00' as toTime,
v.ID,
COUNT(*) as nVisits
FROM dbo.Table1 v INNER JOIN dbo.Table2 t ON v.FSLDU = t.FSLDU5
WHERE v.AdmissionOn >= '01-01-2010' AND v.AdmissionOn < DATEADD(day,1,'02-01-2010')
AND v.ID = Coalesce(@id,ID)
GROUP BY
CAST(v.AdmissionOn as date),
(DATEPART(hour,CAST(AdmissionOn as time)))/(24/1),
(DATEPART(hour,CAST(AdmissionOn as time)))/(24/1) * (24/1),
(DATEPART(hour,CAST(AdmissionOn as time)))/(24/1) * (24/1) + (24/1),
v.ID
ORDER BY 2,3,4
Он вернет набор результатов, аналогичный этому, когда @id
равен нулю:
ALL 2010-01-01 0 0:00 24:00 7 4
ALL 2010-01-01 0 0:00 24:00 4 54
ALL 2010-01-01 0 0:00 24:00 0 2303
ALL 2010-01-01 0 0:00 24:00 3 412
ALL 2010-01-01 0 0:00 24:00 6 57
ALL 2010-01-01 0 0:00 24:00 2 64
ALL 2010-01-01 0 0:00 24:00 5 5
ALL 2010-01-01 0 0:00 24:00 1 103
Но я бы хотелвместо этого:
ALL 2010-01-01 0 0:00 24:00 ? 3002
Я не уверен, что будет в?колонка, возможно, что-то вроде 1,2,3,4,5,6,7?
Возможно ли это вообще чем-то, например, случаем в предложении select / group by или хранимой процедурой, о которой я не знаю?Если нет, я могу просто создать новую функцию, но я надеялся, что будет способ сделать это, просто введя @id
как ноль.