SQL左连接结果行转列需求:将两行记录转为单行两列
解决左连接后行转列的单行结果问题
嘿,我懂你现在的困扰:用左连接加case when生成t1、t2列后,返回的是两行数据,每行只有一个列有有效值,另一个是null。想要把它们合并成你期望的单行结果(比如t1=22,t2=120),只需要给case when的结果套个聚合函数,再配合group by就能搞定!
修改后的SQL语句
SELECT MAX(case when l.PatientVisitCluster=1 then t.Result end) as t1, MAX(case when l.PatientVisitCluster=2 then t.Result end) as t2 FROM tPatientLabTestData t LEFT JOIN tPatientLabTest l ON t.tPatientLabTestId = l.Id WHERE l.PatientId = @PatientId AND l.Volgnar = @Volgnar AND l.TestTypeListId = @LabTestId GROUP BY l.PatientId, l.Volgnar, l.TestTypeListId
逻辑说明
- 你的原语句里,每一行对应一个
PatientVisitCluster值,所以t1和t2会交替出现有效值和null。 - 用
MAX()(或者MIN(),这里效果完全一致)聚合函数可以自动忽略null值,把同一分组下的t1、t2有效值提取出来合并到同一行。 GROUP BY子句要包含WHERE条件里的所有非聚合列(PatientId、Volgnar、TestTypeListId),确保分组逻辑精准,只返回你需要的那一组数据。
举个直观的例子:
原查询返回的两行可能是:
| t2 |
|---|
| null |
| 120 |
修改后就会变成你想要的单行结果:
| t2 |
|---|
| 120 |
内容的提问来源于stack exchange,提问作者Lifewithsun
相关产品推荐
相关产品推荐

