SQL只在某些条件符合的情况下才选择行
问题描述:
这似乎是一个基本问题,但我无法弄清楚(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个月的列为空)。我想为每个患者显示一行,并填写所有日期。我显然错过了一些东西(或者一般来说很差),所以我已经发布了求助。
谢谢!
答
对于每位患者您有两个间隔,因此每位患者都有两行!
您的第一行是'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。 – user3182246