【发布时间】:2014-08-19 04:41:00
【问题描述】:
我目前正在处理这个查询
SELECT DISTINCT
se.src_aet AS "Ripped By",
CONVERT(varchar(32), s.created_time, 113) AS "Date/Time Sent",
p.pat_name AS "Patient Name",
p.pat_id AS "Patient ID",
s.accession_no AS "ACC #",
p.pat_birthdate AS "DOB",
s.mods_in_study AS "MOD",
CONVERT(varchar(32), s.study_datetime, 113) AS "Study Date",
s.study_desc AS "Study Desc",
s.study_custom1 AS "Inst Name"
FROM
dbo.patient AS p
INNER JOIN
dbo.study AS s ON s.patient_fk = p.pk
INNER JOIN
dbo.series AS se ON se.study_fk = s.pk
WHERE
accession_no like '%OUT%'
AND s.created_time >= CAST(getdate() as DATE)
AND s.created_time < CAST(DATEADD(day, 1, getdate()) as DATE)
ORDER BY
"Date/Time Sent" DESC
在上面的例子中,它返回:
RIPPED BY DATE/TIME SENT PATIENT NAME PATIENT ID ACC# DOB
BC 18 Aug 2014 12:58:44:297 DOE^JOHN^^^ HOSP1234 OUT 19510101
为了简单起见,我已删除最后几列(在上面的示例输出中)。
它工作正常。它返回了一个在 accession_no 列中包含单词 'OUT' 并且已写入 DB 'today' 的研究列表。
我想要返回的是查询中找到的 dbo.patient 表中“pat_id”的所有唯一值。其中一些患者发现,如果他们之前访问过我们的网站,上述查询可能已经存在于 dbo.patient 表中,但他们会有不同的“pat_id”。
我希望输出的样子是:
RIPPED BY DATE/TIME SENT PATIENT NAME PATIENT ID_OUT PATIENT ID_EXIST ACC# DOB STUDY DATE STUDY DESC INST NAME
“PATIENT ID_OUT”列是在 accession_no 列中具有“OUT”值的研究中的患者 ID,“PATIENT ID_EXIST”列是现有患者 ID(如果存在)。如果患者是新患者,则“PATIENT ID_EXIST”的值在某些情况下可能为空。
我在想我需要在这里做一个子查询,但在这种情况下这可能不是正确的做法吗?如果我错了,请纠正我。
编辑:我提供了一个输出示例。我试图根据在查询结果中搜索 pat_name 和 pat_dob 来确定输出中的患者是否具有不同的“患者 ID”。如果 pat_id 列中有另一个或多个患者 ID,那么我希望它们出现在输出中。
我希望这很清楚:)
【问题讨论】:
-
不太清楚你想做什么。您能否提供一小部分数据样本,该样本的输出应该是什么?