2011-10-07 3 views
1

:iSeries AS/400 데이터베이스에 대해 T-SQL을 사용하여 두 정수 값의 나누기를 10 진수로 변환하려면 어떻게합니까? 다음 쿼리 가정

SELECT 
    ID, 
    COUNT(1) AS NumRecords, 
    SUM(Quantity) AS TotalQty 
    SUM(Quantity)/COUNT(1) AS Avg 
FROM  SOME_TABLE 
GROUP BY ID 

는 지금은 반환

ID NumRecords TotalQty Avg 
1  15   6   2 

가 나는 그것이 Avg (즉, "2.5")에 대한 2의 규모와 소수점 값을 반환합니다.

나는 DECIMAL, NUMERIC, FLOAT 및 VARCHAR로 계산을 시도했지만 항상 INTEGER를 리턴합니다. CAST

답변

6

결과가 아닌 계산에 입력을 캐스트해야합니다. 또한 AVG 기능을 사용하지 않는 이유는 무엇입니까?

AVG(CAST(Quantity as decimal(10,2))) 
+0

CAST (SUM (수량) (10, 2)/CAST (COUNT를 곱하면 정밀도 후미 제로의 개수에 의해 결정될 것이다 사용 (1) DECIMAL (10, 2)) 결과는 소수점 21 자리를 반환합니다 –

+0

전체 계산에 대해 또 다른 CAST가 필요합니다. 따라서 눈금을 지정하려면 입력 값과 계산 전체에 대해 필요합니다 –

+0

@Eric - 한 입력을' decimal'을 사용하면 리턴 값을보다 예측 가능하게 만들 수 있습니다. –

4

대체 솔루션은 암시 적 캐스팅을 통한 방법입니다. 나는 이것이 훨씬 더 깨끗한 SQL이기도하다는 것을 알았다. DECIMAL AS 1.

AVG(Quantity * 1.00) //x.xx 
AVG(Quantity * 1.0000) //x.xxxx