【发布时间】:2010-12-04 08:33:38
【问题描述】:
我正在使用一个医疗记录系统,该系统将数据存储在一个类似于电子表格的结构中——列标题中的日期/时间,每行第一列中的测量值(例如医生姓名、Rh、血型),和相交单元格中的值。基于此构造的报告通常需要显示 10 个或更多这些度量。
出于报告目的,数据集需要为每位患者提供一行、进行测量的日期/时间以及每次测量的一列。本质上,需要将结构旋转 90 度。
有一次,我实际上使用 SQL Server 的 PIVOT 功能来做到这一点。由于各种原因,这种方法显然行不通。我决定使用内联视图 (IV) 将数据转换为所需的格式。简化的查询类似于:
SELECT patient_id,
datetime,
m1.value AS physician_name,
m2.value AS blood_type,
m3.value AS rh
FROM patient_table
INNER JOIN ( complex query here
WHERE measure_id=1) m1...
INNER JOIN (complex query here
WHERE measure_id=2) m2...
LEFT OUTER JOIN (complex query here
WHERE measure_id=3) m3...
如您所见,在某些情况下,这些 IV 用于限制结果数据集(INNER JOIN),在其他情况下,它们不限制数据集(LEFT OUTER JOIN)。但是,除了 measure_id 不同之外,每个度量的“复杂查询”部分基本相同。虽然这种方法有效,但它会导致相当大的 SQL 语句,限制重用,并使查询容易出错。
我的想法是用内联表值 UDF 替换“复杂查询”和 WHERE 子句。这将大大简化查询,减少错误并增加代码重用。我心中唯一的问题是性能。 UDF 方法会导致性能显着下降吗?它可能会改善问题吗?
感谢您的时间和考虑。
【问题讨论】:
标签: sql sql-server tsql user-defined-functions