将相似记录上的不同列分组

时间:2019-02-21 17:27:58

标签: mysql sql

我有一个简单的查询,该查询提取三个字段:ID,实验室和过程。

当ID和实验室相同但过程不同时,查询将显示两行,而不是显示

(例如ID:1,实验室:血液,程序:身体; ID:1,实验室:血液,程序:眼睛检查)

如何将其分组,以便在具有相似的ID和实验室时,结果仅是具有多个过程列的一条记录?

(ex ID:1,实验室:血液,步骤1:身体检查,步骤2:眼睛检查)

这是我的查询

SELECT
  pe.ID 
 ,l.acttextdisplay as Lab
 ,pp.service_item_desc as Procedure
FROM lab l
JOIN patient_encounter pe ON l.ID = pe.ID
JOIN patient_procedure pp ON pp.ID = pe.ID

2 个答案:

答案 0 :(得分:0)

您可以使用group_concat

SELECT
  pe.ID 
 ,l.acttextdisplay as Lab
 , group_concat(pp.service_item_desc)  as Procedure
FROM lab l
JOIN patient_encounter pe ON l.ID = pe.ID
JOIN patient_procedure pp ON pp.ID = pe.ID
group by  pe.ID ,l.acttextdisplay 

通过这种方式,您将获得id为id的sinle,所有步骤均在同一实验室

在sqlserver中,您可以使用

 STRING_AGG(pp.service_item_desc, ',') 

答案 1 :(得分:-1)

您可以使用group by和条件聚合:

SELECT pe.ID 
       MAX(CASE WHEN pp.service_item_desc THEN 'blood' THEN l.acttextdisplay END) as blood,
       MAX(CASE WHEN pp.service_item_desc THEN 'eye' THEN l.acttextdisplay END) as eye,
       . . .
FROM lab l JOIN
     patient_encounter pe
     ON l.ID = pe.ID JOIN
     patient_procedure pp
     ON pp.ID = pe.ID
GROUP BY pe.ID