2014-01-27 38 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

相關問題