【问题标题】:SQL Select Only Rows Where Certain Condition is metSQL 仅选择满足特定条件的行
【发布时间】:2014-02-18 20:52:18
【问题描述】:

这似乎是一个基本问题,但我就是想不通(Oracle SQL)。

我需要提取多个表中包含的特定就诊间隔的患者就诊日期,但是这些表之一包含多次就诊:

基线表:患者编号,就诊日期(这是基线就诊)

程序表:患者编号,就诊日期(这是程序就诊)

跟进表:Patient Number、就诊间隔、就诊日期(其中就诊间隔包含以下值如“1 个月访问”、“2 个月访问”、“3 个月访问”等)

我想整理一张就诊日期表,将每位患者作为一行,将每个就诊间隔作为列标题。我尝试使用 CASE 语句执行此操作,但我为单个患者返回多行。

这是我目前所拥有的:

SELECT DISTINCT
    BASE.PT AS "Patient Number",
    BASE.VIST_DATE AS "Baseline",
    PROC.VISIT_DATE AS "Procedure",
    CASE
        WHEN FOLLOWUP.VISIT_INTERVAL = '1_Month'
        THEN FOLLOWUP.VISIT_DATE
        ELSE NULL END AS "1 Month",
    CASE
WHEN FOLLOWUP.VISIT_INTERVAL = '2_Month'
    THEN FOLLOWUP.VISIT_DATE
    ELSE NULL END AS "2 Month"
FROM BASE
LEFT JOIN PROC
    ON BASE.PT=PROC.PT
LEFT JOIN FOLLOWUP
    ON BASE.PT=FOLLOWUP.PT

这将为每位患者返回 2 行,其中 1 行包含基线、程序和 1 个月的就诊日期(2 个月的列为空),另一行包含基线、程序和 2 个月的就诊日期(1 个月的列为空)。我想为每位患者显示 1 行,并填充所有日期。我显然遗漏了一些东西(或者总体上做得很糟糕),所以我发帖寻求帮助。

谢谢!

【问题讨论】:

    标签: sql oracle select case


    【解决方案1】:

    每个患者有两个间隔,因此每个患者有两行!

    您的第一行是间隔为“1_month”的行,在这一行中,您只填充了该列,而另一行的间隔和度量为“2_month”。

    为了获得正确的结果,您可以使用聚合:

    SELECT
        BASE.PT AS "Patient Number",
        MAX(BASE.VIST_DATE) AS "Baseline",
        MAX(PROC.VISIT_DATE) AS "Procedure",
        CASE
            WHEN FOLLOWUP.VISIT_INTERVAL = '1_Month'
            THEN FOLLOWUP.VISIT_DATE
            ELSE NULL END AS "1 Month",
        CASE
    WHEN FOLLOWUP.VISIT_INTERVAL = '2_Month'
        THEN FOLLOWUP.VISIT_DATE
        ELSE NULL END AS "2 Month"
    FROM BASE
    LEFT JOIN PROC
        ON BASE.PT=PROC.PT
    LEFT JOIN FOLLOWUP
        ON BASE.PT=FOLLOWUP.PT
    GROUP BY BASE.PT
    

    【讨论】:

    • 很简单,谢谢!我还必须在每个后续间隔案例中添加 MAX。
    猜你喜欢
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    相关资源
    最近更新 更多