2012-05-08 5 views
0

저는 PI가 장비를 소유하고있는 사람 (> $ 100K 값)을 결정하는 방법으로 이러한 두 가지 쿼리를 결합하려고합니다. 나는 PI가 소유하고있는 모든 장비가 100k 이상인 장비를 찾을 수 있습니다. 또한 모든 PI를 볼 수있는 능력이 있습니다. 나는이 2 개의 쿼리를 결합 할 수 없다. WHERE 하위 쿼리 및 EXIST 하위 쿼리를 시도했습니다. 나는 질의 # 2에 PI가있는 모든 장비 (PI 소유자와 일치)를 찾을 수 있기를 원합니다. 발견 특정 PISQL 하위 쿼리 질문

select Account_No,Inventory_No,Building_No,Room_No,CDDEPT,Location,Normalized_MFG,Manufacturer_Name,Normalized_Model,Name,Serial_Code,CONCAT('$', FORMAT(Cost, 2)) as Cost, Equipment_Inventory_Normalized.Active 
from Temp_Equipment_Inventory.Equipment_Inventory_Normalized, `paul`.`ROOM`, `paul`.`BLDG`, `paul`.`LABORATORY`, `paul`.`PERSON` 
where (`PERSON`.`ID` = `LABORATORY`.`PI_ID` OR `PERSON`.`ID` = `LABORATORY`.`SUPV_ID`) 
AND `LABORATORY`.`RM_ID` = `ROOM`.`ID` 
AND `LABORATORY`.`ACTIVE` = '1' 
AND `ROOM`.`BLDG_ID` = `BLDG`.`ID` 
AND ((
`BLDG`.`BLDGNUM` = Equipment_Inventory_Normalized.Building_No 
AND Equipment_Inventory_Normalized.Actual_Building IS NULL 
AND (`BLDG`.`BLDGNUM` != '1023' AND `LABORATORY`.`OTHER_LEVEL` != '1' AND `ROOM`.`RMNUM` != '0199') 
)OR (
`BLDG`.`BLDGNUM` = Equipment_Inventory_Normalized.Actual_Building AND 
(`BLDG`.`BLDGNUM` != '1023' AND `LABORATORY`.`OTHER_LEVEL` != '1' AND `ROOM`.`RMNUM` != '0199') 
)) 
AND ((
`ROOM`.`RMNUM` = Equipment_Inventory_Normalized.Room_No 
AND Equipment_Inventory_Normalized.Actual_Room IS NULL 
)OR (
`ROOM`.`RMNUM` = Equipment_Inventory_Normalized.Actual_Room 
)) 
AND Equipment_Inventory_Normalized.Active !=0 
AND SurplusPending != '1' 
AND Cost >= 100000 
AND `PERSON`.`CANNUM`='810010787' 

쿼리 2의 장비를 찾는

쿼리 # 1은 모든 PI는 아마도

select distinct i.CAN 
from CGWarehouse.CCGV10WC w 
inner join CGWarehouse.CCGV10IC i 
on w.PROJECT_NUMBER=i.SPONSORED_PROJECT 
and w.SEQUENCE_NUMBER=i.PROJECT_SEQUENCE 
where w.STATUS='A' 
and i.PRIN_INVEST_CODE='Y' 
and i.DEL_CODE!='Y' 
and i.CAN IS NOT NULL 
+0

두 쿼리의 열은 당신이에 가입 바라고있다? – ethrbunny

답변

2

당신의 IN 키워드를 찾고있는 당신 WHERE 절?

는 용서,하지만 난 그것을 좀 내 OCD의 일이 ... 쿼리 조금의 서식을 정리했다 :

SELECT 
    Account_No, 
    Inventory_No, 
    Building_No, 
    Room_No, 
    CDDEPT, 
    Location, 
    Normalized_MFG, 
    Manufacturer_Name, 
    Normalized_Model, 
    Name, 
    Serial_Code, 
    CONCAT('$', FORMAT(Cost, 2)) AS Cost, 
    Equipment_Inventory_Normalized.Active 
FROM 
    Temp_Equipment_Inventory.Equipment_Inventory_Normalized a, 
    `paul`.`ROOM`, 
    `paul`.`BLDG`, 
    `paul`.`LABORATORY`, 
    `paul`.`PERSON` 
WHERE 
    (`PERSON`.`ID` = `LABORATORY`.`PI_ID` OR `PERSON`.`ID` = `LABORATORY`.`SUPV_ID`) 
    AND `LABORATORY`.`RM_ID` = `ROOM`.`ID` 
    AND `LABORATORY`.`ACTIVE` = '1' 
    AND `ROOM`.`BLDG_ID` = `BLDG`.`ID` 
    AND (
     (
      `BLDG`.`BLDGNUM` = Equipment_Inventory_Normalized.Building_No 
      AND Equipment_Inventory_Normalized.Actual_Building IS NULL 
      AND `BLDG`.`BLDGNUM` != '1023' 
      AND `LABORATORY`.`OTHER_LEVEL` != '1' 
      AND `ROOM`.`RMNUM` != '0199' 
     ) OR (
      `BLDG`.`BLDGNUM` = Equipment_Inventory_Normalized.Actual_Building 
      AND `BLDG`.`BLDGNUM` != '1023' 
      AND `LABORATORY`.`OTHER_LEVEL` != '1' 
      AND `ROOM`.`RMNUM` != '0199' 
     ) 
    ) 
    AND (
     (
      `ROOM`.`RMNUM` = Equipment_Inventory_Normalized.Room_No 
      AND Equipment_Inventory_Normalized.Actual_Room IS NULL 
     ) OR (
      `ROOM`.`RMNUM` = Equipment_Inventory_Normalized.Actual_Room 
     ) 
    ) 
    AND Equipment_Inventory_Normalized.Active !=0 
    AND SurplusPending != '1' 
    AND Cost >= 100000 
    AND `PERSON`.`CANNUM` IN (/* this assumes that the `PERSON`.`CANNUM` column matches up with the CGWarehouse.CCGV10IC.CAN column */ 
     SELECT DISTINCT i.CAN 
     FROM 
      CGWarehouse.CCGV10WC w 
      INNER JOIN CGWarehouse.CCGV10IC i ON w.PROJECT_NUMBER=i.SPONSORED_PROJECT AND w.SEQUENCE_NUMBER=i.PROJECT_SEQUENCE 
     WHERE 
      w.STATUS='A' 
      AND i.PRIN_INVEST_CODE='Y' 
      AND i.DEL_CODE!='Y' 
      AND i.CAN IS NOT NULL 
    ) 
+0

정말 고마워요. 이것은 나에게 내가 원하는 결과를 준다. – Evilsithgirl