【发布时间】:2017-10-31 08:40:51
【问题描述】:
我目前正在处理一些数据,这些数据显示了在诊所接受过某种类型手术的所有患者。此过程类别由多个代码组成,每个代码代表属于该类别的更具体的过程。诊所的质量倡议规定患者应在一定时间内接受这些程序之一;问题是他们每个人都有不同的标准,关于他们什么时候可能发生,以便计算质量目的。
让我分解一下,希望能更好地解释一下。假设我们有 3 个代码,每个代码代表一种过程。
CODE DESCRIPTION
--------------------
1234 Basic procedure
5678 Intermediate procedure
9012 Thorough procedure
现在,每种类型的程序都有自己的时间表。基本版本必须在过去一年内完成才能计算在内。中间的可以是过去四年年的任何时间,彻底的可以是十年年的时间。因此,在 2014 年进行中间手术的患者仍将计入质量目的,而在 2009 年进行彻底手术的患者仍将计入。
我有我的基本查询:
SELECT DISTINCT
PatientID,
PatientAge,
ProcedureCode,
CodeDescription,
ServiceDate,
RenderingProvider,
VisitType
FROM ServiceDetail
WHERE ProcedureCode IN ('1234','5678','9012')
(是的,过程代码存储为 varchars,因为实际数据库中的某些代码是字母数字)
现在,我希望能够使用 IF/THEN/ELSE 逻辑来做一些事情,除非我弄错了,否则这将是 SQL 中的 CASE 语句),可以查看代码类型、服务日期程序发生,并确定该程序是否出于质量目的而计数。
伪代码示例:
IF ProcedureCode = 5678
AND ServiceDate is between [GETDATE() minus 4 years] and GETDATE()
THEN Yes
对于其他两种程序类型,它们各自的时间范围会有相同的陈述。我希望查询仅在这些情况返回 true 时显示结果。
我的问题是我知道什么我需要做,但是我的 SQL 已经生锈了,我不确定 如何 去做。基本上我正在寻找有关语法的提示。
【问题讨论】:
-
这些服务详情是否有唯一 ID?
-
@scsimon 有一个访问 ID 字段可以用于此目的,是的,虽然我没有在我的查询中包含它
-
你需要查询
ServiceDetail表对吧?它的结构是什么? -
@gaganshera 不确定你所说的结构是什么意思...?
标签: sql sql-server sql-server-2012 case