【问题标题】:SQL Server 2008 - select based on query resultsSQL Server 2008 - 根据查询结果进行选择
【发布时间】: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,那么我希望它们出现在输出中。

我希望这很清楚:)

【问题讨论】:

  • 不太清楚你想做什么。您能否提供一小部分数据样本,该样本的输出应该是什么?

标签: sql-server-2008 select


【解决方案1】:

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

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

【讨论】:

  • 我刚试过这个,它抱怨“q.pat_id”是一个无效的列名。
  • 啊,我没有看到您在子查询中将 pat_id 别名为“Patient ID”。我的错。如果您修改子查询并删除 AS“Patient ID”,查询应该可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-22
  • 1970-01-01
  • 2010-12-28
  • 2013-05-17
相关资源
最近更新 更多