PRB: 부서 수식 입력 SUM 또는 AVG 함수를 사용하면 정밀도 손실이 발생할 수 있다

기술 자료 번역 기술 자료 번역
기술 자료: 281341 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

현상

나누기 SUM 또는 AVG 집계 함수를 사용하여 결과 정밀도가 손실됩니다. 숫자 또는 10진수 데이터 형식 사용 여부에 관계없이 정밀도 손실이 발생합니다.

원인

이 동작은 10진수 및 숫자 데이터 형식이 특성과 정밀도와 배율 값을 결과로 발생하는 잘라내기 때문에. SQL Server 온라인 맞춰 sum(numeric(p,s)) 결과는 numeric(38,s)입니다. 앞의 경우에는 sum(amount) numeric(38,9) 것입니다. numeric(38,9) 식의 있을 경우/numeric(15,9), 결과는 numeric(63,25) 것이 좋습니다. 그러나 최대 정밀도는 38 때문에 결과 (38,6) 자릅니다.

해결 과정

이 문제를 해결하려면 이러한 방법 중 하나를 사용하십시오.
  • 숫자를 나누는 사용하십시오. 예를 들면:

    DECLARE @Quantity numeric(15,9)
    SET @Quantity = 3
    
    SELECT Round(CAST(Sum(t1.Amount) AS numeric(15,9))/@Quantity, 9) As Cost
    FROM t1
    
    					
  • 합계를 변수에 먼저 저장하고 수식의 변수를 사용하십시오. 예를 들면:

    
    declare @quantity numeric (15,9)
    set @quantity = 3
    
    declare @sum numeric (15,9)
    set @sum= (select sum(amount) from t1)
    select @sum/@quantity as cost
    
    					
  • 명시적 값을 한 분모 포함시킵니다. 예를 들어,:
    select sum(Amount)/3 from t1
    					

추가 정보

쿼리 분석기에서 다음 쿼리를 실행하여 문제를 재현하려면:
CREATE TABLE t1 
(
    Amount    numeric(15,9)    
)
GO
INSERT INTO t1( Amount ) VALUES (0.7)
INSERT INTO t1( Amount ) VALUES (1.3)
SELECT Amount FROM t1

/* result (correct, scale = 9)
Amount    
  
----------------- 
.700000000
1.300000000

DECLARE @Quantity numeric(15,9)
SET @Quantity = 3
    
SELECT t1.Amount / @Quantity As Cost
FROM t1
				
다시, 배율 및 정밀도 결과 에서 올바른지.

그러나 이 코드를 사용하는 경우

DECLARE @Quantity numeric(15,9)<BR/>
SET @Quantity = 3

SELECT Sum(t1.Amount)/@Quantity As Cost<BR/>
FROM t1
				
.666666 결과는.

분모 명시적 값을 제공하면 정밀도 손실이 발생하지 않습니다. 합계 값을 입력하면 정밀도 손실이 발생하지 않습니다:

select sum(Amount)/3 from t1
GO
select 2.0000000/@quantity

				
변수 SUM(amount) 저장하고 다음 변수를 사용하여 없음 정밀도 손실이 발생합니다. 수학 공식 집계 키워드의 SUM 또는 AVG 나누기 함께 사용하면 경우에만 정밀도 손실이 발생합니다.
declare @quantity numeric (15,9)
set @quantity = 3

declare @sum numeric (15,9)
set @sum= (select sum(amount) from t1)

select @sum/@quantity as cost
				

속성

기술 자료: 281341 - 마지막 검토: 2003년 10월 16일 목요일 - 수정: 3.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
키워드:?
kbmt kbprb KB281341 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com