【问题标题】:SQL - Count occurrences across multiple columnsSQL - 计算多列中的出现次数
【发布时间】:2014-06-29 16:21:09
【问题描述】:

我有一个假设的数据库,其中包含患者及其合并症(或通常称为诊断代码):

PATIENT_ID | HOSPITAL | DIAG_01 | DIAG_02 | DIAG_03 | DIAG_04 ...up to Diag_14
 Patient 1 |  Hosp1   |  C01    |  C02    |  NULL   |  NULL
 Patient 2 |  Hosp1   |  A01    |  A02    |  A03    |  P37
 Patient 3 |  Hosp2   |  A01    |  D10    |  X01    |  NULL

患者的合并症(最多可记录 14 种)定义了患者可能患有的任何疾病/疾病。特别是 C00 - C97 和 D00 - D48 与癌症 ICD-10 代码相关。

我想为每家医院制作一份摘要,计算有多少患者的诊断列中有癌症 ICD-10 代码。

根据上述示例,Hosp1 和 Hosp2 各有 1 名癌症患者。患者 1 的 C01 和 C02 诊断代码将仅计为一名癌症患者。但是,如果患者 1 再次入院,则将被视为另一例癌症患者。

我尝试创建一个包含所有癌症合并症的表,并对所有 14 个诊断列使用 JOIN 查询,但无法进行计数。

任何想法或帮助将不胜感激。

【问题讨论】:

    标签: mysql sql database


    【解决方案1】:

    全部使用联合

    SELECT * FROM /**customize your select here could be count() etc **/
     (SELECT PATIENT_ID,HOSPITAL,DIAGNOSIS
    FROM (
        SELECT PATIENT_ID, HOSPITAL, LEFT(DIAG_01,1) AS DIAGNOSIS FROM table_name WHERE DIAG_01 IS NOT NULL UNION ALL   
        SELECT PATIENT_ID, HOSPITAL, LEFT(DIAG_02,1) AS DIAGNOSIS FROM table_name WHERE DIAG_02 IS NOT NULL UNION ALL
        SELECT PATIENT_ID, HOSPITAL, LEFT(DIAG_03,1) AS DIAGNOSIS FROM table_name WHERE DIAG_03 IS NOT NULL UNION ALL
        SELECT PATIENT_ID, HOSPITAL, LEFT(DIAG_04,1) AS DIAGNOSIS FROM table_name WHERE DIAG_04 IS NOT NULL
          ) AS T1
    GROUP BY PATIENT_ID,HOSPITAL,DIAGNOSIS
    ) AS T2
    WHERE DIAGNOSIS IN ('C','D') /**where **/
    

    【讨论】:

      【解决方案2】:

      您的数据布局错误。你应该有一个连接表。但是,你没有。你可以用union all做你想做的事:

      select hospital, count(distinct patient_id)
      from ((select patient_id, hospital, diag_01 as diag
             from hypothetical
            ) union all
            (select patient_id, hospital, diag_02 as diag
             from hypothetical
            )
            union all
            . . .
            (select patient_id, hospital, diag_14 as diag
             from hypothetical
            )
           ) phd
      where diag in ('C01', 'C02');
      

      【讨论】:

      • 这看起来很棒,谢谢!不幸的是,我受到限制,因为这是一个国家数据库,所以在结构方面可以做的不多
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多