根据多个值返回结果,并根据结果设置值

时间:2019-03-06 01:30:08

标签: sql sql-server tsql

  1. 我正在尝试根据多列中的值返回行。我需要返回会员数据。每个成员都有一个“ DiagnosisID”和“ CategoryScore”。 min(DiagnosisID)为“ MostSevereDiagnosis”。我需要为每个患者返回针对每个CategoryScore的最严重的诊断。因此,例如,一个成员有两个不同的CategoryScore,因此我需要返回两个,但另一个成员具有相同的CategoryScore两次,而我只需要返回一个带有min(diagnosisid)的成员。我的代码在下面,但是我无法按CategoryScore分组,否则会收到错误消息。

  2. 我需要创建列“ IsMostSevereCategory”(我目前的情况是子句对此不正确,但我不知道该怎么做)。每个成员的min(categoryscore)以及任何空值都需要将其设置为1;但其余的必须设置为0。

当前查询:

SELECT 
 sq.MemberID, 
 sq.FirstName, 
 sq.LastName, 
 sq.DiagnosisID AS MostSevereDiagnosis, 
 diagnosisdescription, 
 DiagnosisCategoryID, 
 CategoryDescription, 
 CategoryScore,
 CASE WHEN DiagnosisCategoryID IS NULL THEN 1 ELSE 0 END AS IsMostSevereCategory

FROM
 (select ROW_NUMBER() OVER(PARTITION BY mem.memberid ORDER BY md.DiagnosisID ASC) AS ROWNUM,
 mem.MemberID, 
 mem.FirstName, 
 mem.LastName, 
 md.DiagnosisID, 
 d.diagnosisdescription,
 dc.DiagnosisCategoryID, 
 dc.CategoryDescription, 
 dc.CategoryScore
 from dbo.member mem 
 left join dbo.Memberdiagnosis md on mem.MemberID = md.MemberID
 left join Diagnosis d on md.DiagnosisID = d.DiagnosisID
 left join DiagnosisCategoryMap dcm on d.DiagnosisID = dcm.DiagnosisID
 left join DiagnosisCategory dc on dc.DiagnosisCategoryID = dcm.DiagnosisCategoryID) sq
WHERE ROWNUM =1

当前结果是:

MemID FIRST     LAST   MostSevere DiagDesc  CatID  CatDesc CatScore IsMostSevere
1   John      Smith     2        Diag2      2      CatB    20       0
1   John      Smith     4        Diag4      3      CatC    30       0
2   Jack      Smith    NULL      NULL      NULL    NULL    NULL     1
3   Will      Smyth     3        Diag3      3      CatC    30       0
3   Will      Smyth     4        Diag4      3      CatC    30       0

所以基本上我需要行1和行4的IsMostSevere = 1;并需要删除第5行。

1 个答案:

答案 0 :(得分:1)

尝试一下,告诉我是否无效。 我对您的Row_number进行了重新处理,将您的查询转换为CTE格式,以使其更具可读性,并创建了另一个查询以获取mincat分数。

pw1.hexdigest()