![](/img/trans.png)
[英]SQL: Select all rows that meet a condition if that condition is met, but only a certain nuber rows if it isn't
[英]SQL Select Only Rows Where Certain Condition is met
這似乎是一個基本問題,但我無法弄清楚(Oracle 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個月的訪問日期(2個月列為空),另一行包含“基線”,“過程”和2個月的訪問日期(1個月列為空)。 我想為每個患者顯示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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.