2013-06-12 4 views
2
SELECT ITEMGROUPID , 
     ITEMID , 
     ITEMNAME , 
     ITEMTYPE , 
     COSTGROUPID , 
     SALESMODEL , 
     DIMENSION , 
     (SELECT DESCRIPTION 
      FROM  DIMENSIONS 
      WHERE  (NUM = 0) 
        AND (DIMENSIONCODE = IT1.DIMENSION) 
     ) AS Expr1 
FROM INVENTTABLE AS IT1 
WHERE (DATAAREAID = 'm02') 
     AND (ITEMGROUPID = 'FG') 
     AND (ITEMID = '14901C') 

이 쿼리는 오류를 발생시킵니다. 결과는 열 IT1.DIMENSION에서 값 (int)을 가져와 Dimension 테이블을 검색하고 DIMENSIONS 테이블의 설명 열에서 값 (nvarchar)을 반환해야합니다.nvarchar에서 int 로의 SQL 변환 실패 오류

Conversion Fail. When converting NVARCHAR value 'AG' to datatype INT.

여기서 목적은 위의 두 테이블 INVENTTABLEDIMENSIONS 사이의 조인을 왼쪽 외부의 사용을 배제하는 것이다 실행시

가 다음 오류를 갖는다.

+0

Soooo, 당신은 LEFT JOIN을 피하기를 원하지만 상관 관계가있는 부질의를 원합니까? 또 다른 메모에서 'DIMENSIONCODE' 데이터 유형은 무엇입니까? – Lamak

+0

'AG'값이 ITEMGROUPID 열에서 왔습니까? –

+0

*** SQL ***은 * 많은 구조화 된 쿼리 언어 * - 많은 데이터베이스 시스템에서 사용되는 언어이지만 데이터베이스 제품은 아닙니다 ... 많은 것들이 공급 업체별입니다 - 그래서 우리는 실제로 ** 데이터베이스 시스템 ** (그리고 어떤 버전)을 사용하고 있습니까 (그에 따라 태그를 업데이트하십시오) .... –

답변

0

SQL 서버에서 당신은 IT1.Dimension 칼럼의 내용이 실제로 숫자 인 관대 한 가정을 만드는 그러나

...DIMENSIONCODE = Convert(int, IT1.DIMENSION)...

하여이 작업을 수행 할 것입니다. 어떤 상황에서, 그것은 정수로 번역 할 수있는 무언가를 포함하지 않는 경우에, 당신은 당신이 IT1 경우 식의 결과에 "1"을 강요되는 경우

...DIMENSIONCODE = Convert(int, iif(isnumeric(IT1.DIMENSION) = 1, IT1.DIMENSION, "1"))...

으로 기록해야합니다. DIMENSION은 (는) 유효한 숫자가 아닙니다. 사용중인 데이터베이스에 대해 구체적이지 않으므로 약간의 변형을 사용해야 할 수도 있습니다.

+0

감사합니다. 개종자는 당신이 그것을 상상했던 방식대로 일하게 될 것입니다. 그러나 나는 해결책을 찾았다. 문제는 전환이 아니라 오히려 내 논리 (인간 실수)였습니다. 내 구문에서는 DIMENSIONCODE를 DIMENSION과 비교하고 DIMENSION이 NUM과 쌍을 이루므로 작동하지 않습니다. 코드는 이어야합니다. (DIMENSIONCODE = 0) AND (NUM = IT1.DIMENSION) 그러나 응답 해 주신 데 대해 감사드립니다. 데이터베이스 세부 정보와 관련이 있습니다. Microsoft AX2009 데이터베이스입니다. – user2479728

관련 문제