2013-01-04 3 views
0

"여러 부분으로 구성된 식별자는 바인딩 수 없습니다"나는이 오류 얻을 내가 SQL 서버 2005을 사용하고 오류

*The multi-part identifier "ms.MOP_desc" could not be bound.*

나는 두 가지 선택 쿼리의 각을 테스트하고 잘 개별적으로 일을하지만 그 쿼리를 결합 할 때 오류가 발생했습니다. 아무도이 쿼리에 어떤 문제가 있는지 말해 줄 수 있습니까? 고맙습니다. 대신 테이블의 부속 선택에서 선택하면

SELECT SUM(Amount) AS TotalAmount, ms.MOP_desc 
FROM 
(
    SELECT SUM(hd.delivery_value) AS Amount, ms.MOP_desc 
    FROM TRANSACTION_HEADER AS th 
     INNER JOIN TRANSACTION_DETAIL AS td 
      ON th.transaction_number = td.transaction_number 
     LEFT JOIN hose_delivery hd 
      ON td.delivery_id = hd.delivery_id 
     LEFT JOIN product pr 
      ON pr.product_id = td.product_id 
     INNER JOIN MOP_Setting AS ms 
      ON hd.MOP_ID = ms.MOP_ID 
    WHERE hd.delivery_value > 0 
     AND (th.USER_PERIOD_ID IN (13)) 
     AND (hd.MOP_ID IN (1)) 
     AND hd.Cleared_By != '0' 
    GROUP BY ms.MOP_desc 

    UNION ALL 

    SELECT SUM(td.quantity * td.price_sold) AS Amount, ms.MOP_desc 
    FROM TRANSACTION_HEADER AS th 
     INNER JOIN TRANSACTION_DETAIL AS td 
      ON th.transaction_number = td.transaction_number 
     INNER JOIN MOP_Setting AS ms 
      ON th.MOP_ID = ms.MOP_ID 
    WHERE (th.USER_PERIOD_ID IN (13)) 
     AND (th.MOP_ID IN (1)) 
    GROUP BY ms.MOP_desc 
)t 

답변

2

을 선택 외부에 노출되지 않기 때문에 UNION 에드의 결과 질의는 t에 별칭을 부여한 행 집합입니다. ms 별칭은 더 이상 적용되지 않습니다.

SELECT SUM(Amount) AS TotalAmount, t.MOP_desc 
FROM 
(
... 
)t 

여기가 두 번째 단계 인 SUM 단계라면 바깥 쪽도 GROUP BY 절이 필요합니다.

+0

설명해 주셔서 감사합니다. 정말 도움이됩니다. – ixora

1

, 부속 선택에서 열 이름은

사용

SELECT SUM(Amount) AS TotalAmount, mop 
FROM 
(
    SELECT SUM(hd.delivery_value) AS Amount, ms.MOP_desc as mop 
    FROM TRANSACTION_HEADER AS th 
     INNER JOIN TRANSACTION_DETAIL AS td 
... 
+1

Amount에서이 오류가 발생하지 않는 이유가 여기에 있습니다. 쿼리의 해당 열에 이미 열 이름이 지정되었습니다. – LuigiEdlCarno

+2

"subselect의 열 이름이 외부 선택에 노출되지 않습니다."는 노골적으로 * not * true입니다. 이름이 지정되지 않은 * 열 (예 :'SUM')에 이름을 지정해야하지만 열 이름은 보존됩니다. –

+0

이 작동합니다. 도와 주셔서 감사합니다. – ixora