我有以下SQL语句,
SELECT DISTINCT
Mem.MemberID, Mem.LastName + ', ' + Mem.FirstName AS Name,
MIN(MD.DiagnosisID) OVER(PARTITION BY Mem.MemberID) AS 'Most Severe Diagnosis'
,MIN(Diag.DiagnosisDescription) OVER(PARTITION BY Mem.MemberID) AS 'Most Severe Diagnosis Description'
,dc.DiagnosisCategoryID, dc.CategoryDescription, dc.CategoryScore,
MIN(ISNULL(DC.DiagnosisCategoryID,1)) OVER(PARTITION BY Mem.MemberID) AS 'Most Severe Category'
FROM
Member AS Mem
LEFT OUTER JOIN
MemberDiagnosis AS MD ON Mem.MemberID = MD.MemberID
LEFT OUTER JOIN
Diagnosis AS Diag ON MD.DiagnosisID = Diag.DiagnosisID
LEFT OUTER JOIN
DiagnosisCategoryMap AS Map ON Map.DiagnosisID = Diag.DiagnosisID
LEFT OUTER JOIN
DiagnosisCategory AS DC ON DC.DiagnosisCategoryID = Map.DiagnosisCategoryID
ORDER BY Name
返回下表,
ID|NAME |MOST SEVERE DIAG|DIAG DESCPTION |CatId|Cat DESC |SCORE|Is Most Severe|
--+-----------+----------------+---------------+-----+----------+-----+--------------+
2 |Smith, Jack|NULL |NULL |NULL |NULL |NULL |1 |
1 |Smith, John|2 |Test Diagnosis2|2 |Category B|20 |2 |
1 |Smith, John|2 |Test Diagnosis2|3 |Category C|30 |2 |
3 |Smyth, Will|3 |Test Diagnosis3|3 |Category C|30 |3 |
--+-----------+----------------+---------------+-----+----------+-----+--------------+
在“最严重”列中,如何将其默认设置为0,如果CatId最严重或为空,则将其设置为1。所以在上表中,最后一列会有数据; 1 1 0 1。
使用CASE
表达式:
SELECT DISTINCT
Mem.MemberID,
Mem.LastName + ', ' + Mem.FirstName AS Name,
MIN(MD.DiagnosisID) OVER(PARTITION BY Mem.MemberID) AS 'Most Severe Diagnosis',
MIN(Diag.DiagnosisDescription) OVER(PARTITION BY Mem.MemberID) AS 'Most Severe Diagnosis Description',
dc.DiagnosisCategoryID,
dc.CategoryDescription,
dc.CategoryScore,
CASE WHEN dc.DiagnosisCategoryID = MIN(MD.DiagnosisID) OVER(PARTITION BY Mem.MemberID) OR
dc.DiagnosisCategoryID IS NULL
THEN 1 ELSE 0 END AS 'Is Most Severe'
FROM
Member AS Mem
LEFT OUTER JOIN
MemberDiagnosis AS MD ON Mem.MemberID = MD.MemberID
LEFT OUTER JOIN
Diagnosis AS Diag ON MD.DiagnosisID = Diag.DiagnosisID
LEFT OUTER JOIN
DiagnosisCategoryMap AS Map ON Map.DiagnosisID = Diag.DiagnosisID
LEFT OUTER JOIN
DiagnosisCategory AS DC ON DC.DiagnosisCategoryID = Map.DiagnosisCategoryID
ORDER BY
Name;