代码之家  ›  专栏  ›  技术社区  ›  Abdullah

如何在一行而不是多行中为同一样本选择多个测试名称?

  •  1
  • Abdullah  · 技术社区  · 10 月前

    如果这些测试属于一个sample_id,我如何在oracle SQL中选择一行中的所有测试名称,而不是多行?

    这是查询

    select distinct d.sample_id, c.test_name_eng 
    from mr_files a,
         lab_sample_header b,
         lab_tests c,
         lab_sample_details d,
         lab_orders o
    where a.patient_no = b.patient_no 
      and b.order_id = d.order_id
      and c.test_no = d.test_no
      and a.patient_no = o.patient_no 
      and b.order_id = o.order_id
      and d.order_id = 2025000045
      and b.sample_id = d.sample_id
      and d.sample_status = 2;
    

    现在输出:

    SAMPLE_ID                  TEST_NAME   
    BCH-25-100                 CALCIUM 
    BCH-25-100                 SODIUM 
    BCH-25-100                 ALBUMIN 
    HE-25-43                   CBC 
    

    但如果测试具有相同的样本ID,我需要输出显示在一行中,而不是像这样的多行中:

    SAMPLE_ID                  TEST_NAME   
    BCH-25-100                 CALCIUM ,SODIUM , ALBUMIN 
    HE-25-43                   CBC 
    

    SQL server中有一个函数叫做`

    string_agg
    

    `但我不知道如何在神谕中做到这一点?

    1 回复  |  直到 10 月前
        1
  •  1
  •   samhita    10 月前

    您可以使用 LISTAGG GROUP BY sample_id用于获取test_names的逗号分隔值

    select
        sample_id,
        LISTAGG(test_name_eng, ', ') WITHIN GROUP (ORDER BY test_name_eng) AS test_names
    FROM
    test -- your tables and joins
    GROUP BY
        sample_id ;