2012-07-12 5 views
0

외래 키를 재사용하는 테이블이 있으며 각각의 경우에 대해 다른 값을 조인하고 싶습니다. 첫 번째 표는 약물 투여 활동을 설명합니다. ID, 마약, 루트, 차량 등을 가리키는 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 문을 사용하여 도징 단위를 표시하고 싶습니다.

'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 

감사 SELECT 문은 다음과 같이 보일 것입니다. 당신이 필요

답변

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

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 
관련 문제