使用SQLServer的2008是否可以在select/group by語句中使用if子句?還是另一種解決方案
目前,我有如下圖所示(雖然有在我剛剛填寫他們在這裏給什麼樣的投入可能是一個更好的主意函數變量)實現的功能的功能。
我想知道是否有一種方法,當你定義爲如果你沒有通過的條款選擇/組中定義它@id
爲空值(目前在合併上v.ID使用)來匹配一切嗎?
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
爲空即可。
爲什麼你使用'(24/1)',而不僅僅是'24'? – 2011-03-22 15:16:57
它實際上是24/@nIntervals,但我替換它爲示例,因爲我不想定義我使用的變量時,我可以顯式地填寫值。 – Mike 2011-03-22 15:37:03
我現在看到了,謝謝。 – 2011-03-22 15:52:06