2012-07-12 73 views
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 

單位(簡體)

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 

感謝您的幫助。

回答

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 
+0

組!我怎麼能忘記團體!仍然是SQL的小菜鳥。我會試一試。 – cjweitz 2012-07-12 18:48:44

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 
相關問題