如何在表中使用一个值来替换同一个表中的另一个值?

时间:2013-04-13 19:24:35

标签: sql sql-server-2008

我有一个包含代码的表(即8202-6),并且在不同的列中有一个结果值。我使用“Case When”函数将代码从单个列中取出,并根据代码编号将它们放在不同的列中。但是,现在我最终在行中有一堆空值,一个代码有一个结果。我想用它的相应值替换实际代码(即8206-6 =高度,结果75)。因此,在高度列中,我得到LOINC代码而不是75的高度值。任何人都可以帮我找出正确的代码。下面是我用来分隔列的代码示例。

Select Distinct

p.PatientID,
Convert(varchar, fs.obsdate, 101) as Date_of_Service,
p.LASTNAME,
p.FIRSTNAME,
CONVERT(varchar, "p"."DATEOFBIRTH", 101) as DOB,
Case When fs.loinccode='8302-2' Then fs.loinccode end as Height,
Case When fs.loinccode='3141-9' Then fs.loinccode end as Weight,
Case When fs.loinccode='8310-5' Then fs.loinccode end as Temperature,
Case When fs.loinccode='8287-5' Then fs.loinccode end as HeadCircumf,
Case When fs.loinccode='8867-4' Then fs.loinccode end as Pulse,
Case When fs.loinccode='9279-1' Then fs.loinccode end as Respiration,
Case When fs.loinccode='8480-6' Then fs.loinccode end as BPSystolic,
Case When fs.loinccode='8462-4' Then fs.loinccode end as BPDiastolic,
fs.obsvalue as Test_Results,
fs.units as Test_Units

From

PERSON as p 
Left Outer join flowsheet_observation fs on fs.pid=p.pid 

结果:

Height  Weight  Temperature HeadCircumf Pulse   Respiration BPSystolic  BPDiastolic Test_Results    Test_Units
NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    + history of lef tshoulder dislocation 10 years ago    Current Meds:        NULL
NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    never   NULL
NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    regular NULL
NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    tympanic    NULL
NULL    NULL    NULL    NULL    NULL    NULL    NULL    8462-4  100 mm Hg
NULL    NULL    NULL    NULL    NULL    NULL    8480-6  NULL    140 mm Hg
NULL    NULL    NULL    NULL    8867-4  NULL    NULL    NULL    82  /min
NULL    NULL    8310-5  NULL    NULL    NULL    NULL    NULL    99.1    deg F
NULL    3141-9  NULL    NULL    NULL    NULL    NULL    NULL    283 lb
8302-2  NULL    NULL    NULL    NULL    NULL    NULL    NULL    72.5    in
NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    37.72   NULL
NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    regular NULL
NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    tympanic    NULL
NULL    NULL    NULL    NULL    NULL    NULL    NULL    8462-4  100 mm Hg
NULL    NULL    NULL    NULL    NULL    NULL    8480-6  NULL    142 mm Hg
NULL    NULL    NULL    NULL    8867-4  NULL    NULL    NULL    86  /min
NULL    NULL    8310-5  NULL    NULL    NULL    NULL    NULL    99.4    deg F
NULL    3141-9  NULL    NULL    NULL    NULL    NULL    NULL    281 lb

对此的任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您需要创建一个表code_names,它将代码与其含义相关联,

code   | label
8302-2 | Height
3141-9 | Weight
...

然后用它连接flowheet_observation并选择标签而不是代码。不需要所有这些案件。

编辑:如果不能创建代码表,可以使用union创建代码关系:

SELECT'8302-2'AS代码,'高度'AS标签 联盟 选择'3141-9'AS代码,'重量'AS标签 联盟 ...

答案 1 :(得分:0)

TRY使用MAX(结束时的情况) 和其他字段分组