0

我有一个重用外键的表,我想为每种情况加入不同的值。第一个表描述了药物给药活动。它具有指向药物、路线、车辆等的 ID。令人困惑的是,它重用了 Unit ID,它是单个描述表中的外键。

组(简体)

GROUP_NO    DRUG      DRUG_AMOUNT     DRUG_UNIT     CHECK_UNIT
   1        568           5               7              5
   2        689           1               7              5
   2        568           5               7              5
   3        19            0.5            10             
   4        984           10             10              5

单位(简体)

UNIT_ID      UNIT_DESCR
   5         kg
   7         mg
   10        mL

我想生成一个查询,为所有组的每个药物剂量返回一行。除了单位,我什么都能做。我想使用 CASE 语句来显示剂量单位。select 语句看起来像这样:

'DOSE UNITS' =
CASE
WHEN CHECK_UNIT IS NULL THEN DRUG_UNIT_DESCR
ELSE CONCAT(DRUG_UNIT_DESCR+'/'+CHECK_UNIT_DESCR)
END

我试图让这个例子的结果看起来像这样:

结果

GROUP_NO      DRUG          DRUG_AMOUNT     'DOSE UNITS'
    1       HelpsAlot           5              mg/kg
    2       HelpsMore           1              mg/kg
    2       HelpsAlot           5              mg/kg
    3       DoesNothing         0.5            mL
    4       WhoKnows            10             mL/kg

谢谢你的帮助。

4

2 回答 2

1

您需要两个连接,每个键一个:

select g.*,
       'DOSE UNITS' = (CASE WHEN CHECK_UNIT IS NULL THEN du.UNIT_DESCR
                            ELSE CONCAT(du.UNIT_DESCR+'/'+cu.UNIT_DESCR)
                       END) 
from groups g left outer join
     units cu
     on g.check_unit_id = cu.unit_id left outer join
     units du
     on g.drug_unit_id = du.unit_id
于 2012-07-12T18:37:43.500 回答
0

假设 drug_unit 总是被填充

select group_no, drug, drug_amount, 
'dose units' =
case
when check_unit is null then u1.unit_descr
else concat(u1.unit_descr+'/'+ u2.unit_descr)
end
from groups g inner join units u1
on g.drug_unit = u1.unit_id
left join units u2 
on g.check_unit = u2.unit_id
于 2012-07-12T18:41:30.050 回答