2010-12-29 4 views
1

5 개의 case 문이 있습니다 (단지 2 개의 case 문만 표시). varchar 값 '1.33'을 데이터 유형 int로 변환 할 때 문제가 발생했습니다.

SELECT DISTINCT 
     CASE [GRADE1] 
     when 1 then 1 
     when 2 then 3 
     when 3 then 5 
     when 4 then 7 
     when 5 then 9 
     End as Q1, 
     CASE [GRADE2] 
     when 1 then 1 
     when 2.3 then 3 
     when 3.33 then 5 
     when 4.67 then 7 
     when 1 then 9 
     End as Q2 
    FROM abcd 

여기에 내가 대신 내가 코드를 작성하도록 요청하고 모든 값을 하드 코딩 나중에 선택 구문을

SELECT a,b  
    INTO #Temp_Q 
    FROM xyz 
WHERE [ds]= 'Data' 

    select distinct t.[b] as [Q] 
    from abcd s 
left join #Temp_Q t on s.[GRADE1] = t.[a] 
         s.[GRADE2] = T.[a] 

을지도 할 필요가 임시 테이블의 값을 넣어하려합니다.

이제 오류가 발생했습니다. 변환 방법을 모르겠습니다. [GRADE2] (FLOAT, NULL)은 열에 어설 션 된 데이터 유형입니다. int 데이터 형식에 VARCHAR 값 '1.33'로 변환 할 때

메시지 245, 수준 16, 상태 1, 줄 14

는 변환에 실패했습니다.

+0

테이블 xyz 및 테이블 abcd의 데이터 유형은 무엇입니까? 원래 테이블이나 쿼리에서 모든 데이터 유형을 10 진수로 변환해야합니다. BTW는 계산을하려고하는 일에 플로트를 사용하지 않습니다. 반올림 오류가 발생합니다. – HLGEM

답변

3

1.33 그것이 DECIMAL의 정수 없습니다. 10 진수와 소수점 뒤에 숫자가 있으므로 1, 2, 3, 4 등의 정수로 표시 할 수 없습니다. 해당 필드를 처리하기 전에 CAST 또는 중 하나를 사용해야합니다.

0

SELECT CAST (AS INT) 또는 SELECT CONVERT (INT, a)를 시도해보고 어떻게 작동하는지 알려주십시오.

0

@JNK가 정확합니다. 그러나 임시 테이블의 데이터 형식을 10 진수로 변경했습니다. 경험적 규칙은 데이터 유형을 모든 처리 단계에서 일관되게 유지하는 것입니다. "1.01"은 십진수이므로 저장시 십진수로 유지하십시오.

관련 문제