SQL Server 2008 - 根据查询结果进行选择

时间:2014-08-18 20:18:36

标签: sql-server-2008 select

我目前正在使用此查询

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

为了简单起见,我已经取了最后几列(在上面的示例输出中)。

工作正常。它带来了一系列研究,其中包含“&#39; OUT&#39;在accession_no列中,已经写入DB&#39;今天&#39;。

我想要归还的是&#39; pat_id&#39;的所有独特价值。在dbo.patient表中查找查询中的那些。其中一些患者发现上述查询可能已存在于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

栏目&#39; PATIENT ID_OUT&#39;是研究中的患者ID,其值为&#39; OUT&#39;在accession_no列和列'PATIENT ID_EXIST&#39;是现有的患者ID,如果确实存在的话。 &#39; PATIENT ID_EXIST&#39;的值如果患者是新患者,在某些情况下可能是空白。

我以为我需要在这里做一个子查询,但在这种情况下,这可能不是正确的做法?如果我错了,请纠正我。

编辑:我提供了一个输出示例。我试图弄清楚输出中的患者是否有不同的患者ID&#39;基于在查询结果中搜索pat_name和pat_dob。如果pat_id列中有另一个或多个患者ID,那么我希望它们在输出中。

我希望这很清楚:)

1 个答案:

答案 0 :(得分:0)

我通常通过将查询视为表并加入它来处理这样的任务。

SELECT p.*
FROM dbo.patient p
INNER JOIN (your big query) q
ON q.pat_id = p.pat_id