0

外部キーを再利用するテーブルがあり、ケースごとに異なる値を結合したいと考えています。最初の表は、薬物投与活動を示しています。ドラッグ、ルート、乗り物などを指す ID があります。紛らわしいのは、単一の説明テーブルの外部キーであるユニット 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

UNITS (簡体字)

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

キーごとに 1 つずつ、合計 2 つの結合が必要です。

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 に答える