2014-01-27 37 views
1

这似乎是一个基本问题,但我无法弄清楚(Oracle SQL)。SQL只在某些条件符合的情况下才选择行

我需要拉其包含多个表中的某些访问间隔患者就诊的日期,但是,这些表中的一个包含多个访问:

基线表:门诊号访问日期 (这是基准访问)

程序表:门诊号访问日期(这是程序的访问)

跟进表:门诊号访问间隔访问日期(其中访问间隔包含的值,如 '1_month访问', '2_month参观', '3_month参观' 等)

我想把每个病人的访问日期表作为一行,并将每个访问间隔作为列标题。我试图用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个月的列为空)。我想为每个患者显示一行,并填写所有日期。我显然错过了一些东西(或者一般来说很差),所以我已经发布了求助。

谢谢!

回答

0

对于每位患者您有两个间隔,因此每位患者都有两行!

您的第一行是'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 
+1

很容易的,谢谢!我必须在每个后续间隔情况下也添加MAX。 – user3182246

相关问题