0
假設我有一張測試結果表和一張治療日期表。如果患者在測試時接受治療,我想組裝一個數據集,其中包含測試結果和等於1的指標。如何獲取GROUP BY查詢中的任意值
testresult表具有PatientID,Date和Value列。 treatmentDate表具有PatientID,以及每次治療的開始日期和結束日期。 PatientID可能已經多次開始和停止治療,並且可以進行任何數量的測試,包括治療和治療。
這是我想出了查詢:
select a.PatientID
,a.[Date]
,a.[Value]
,SUM(CASE WHEN a.[Date]>b.[Start] and a.[Date]<=b.[End] THEN 1 ELSE 0 END) as IsOnTreatment
from testresults a
left join
treatmentDates b on a.PatientID=b.PatientID
group by a.PatientID,a.[Date],a.[Value]
在這種情況下,SUM
作品因爲治療從來沒有重疊。但在其他情況下,我可能想要做這種事情,這可能不是事實。 ANY
在SQL Server中有不同的用途,但有沒有不同的窗口函數告訴我是否有任何行有匹配,而不是所有匹配的SUM
?
我能想到的唯一的事情就是包裹在另一個CASE
語句行:
select a.PatientID
,a.[Date]
,a.[Value]
,CASE WHEN SUM(CASE WHEN a.[Date]>b.[Start] and a.[Date]<=b.[End] THEN 1 ELSE 0 END) >0 THEN 1 ELSE 0 END as IsOnTreatment
from testresults a
left join
treatmentDates b on a.PatientID=b.PatientID
group by a.PatientID,a.[Date],a.[Value]
如何將SUM()更改爲MAX()? – EricZ
而不是你可以使用你的case語句在哪裏條件如--- >> where 1 =(CASE WHEN a。[Date]> b。[Start] and a。[Date] <= b。[End] THEN 1 ELSE 0 END) –