SQL查询,其中字段将为默认值0或1当类别为Null或等于组的最严重ID时

问题描述 投票:1回答:1

我有以下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。

sql tsql sql-server-2014
1个回答
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;
© www.soinside.com 2019 - 2024. All rights reserved.