Я нашел неожиданные результаты в десятичном поле (17,2), кто-то может посмотреть на это и сказать мне, почему это происходит - PullRequest
0 голосов
/ 24 мая 2019

Я создал новую работу etl в SSIS.Все валютные поля определены как decimal(17,2) тип данных.Когда результаты экспортируются в Excel, кажется, что эти поля имеют расширенные десятичные дроби больше 2. Они визуально не существуют в полях, но когда вы делаете сумму столбца, они отображаются в результате.Данные, используемые для заполнения этих полей валюты, имеют один и тот же тип данных, но я храню записи в виде сводки, а не на уровне транзакции.Сначала я думал, что это проблема Excel, поэтому я провел тест в SQL и получил неожиданные результаты.

Как это возможно, если sql хранит только 2 десятичных знака, чтобы вывести 10+ десятичных знаков из функции суммы?Я попытался сделать некоторые исследования по этому вопросу, и я ничего не нашел.

Я исправил результаты, выполнив приведение (раунд (myvalue, 3) как десятичное число (17,2)).в моем выводе все еще есть расширенные десятичные разряды, но они настолько малы, что не вызывают проблемы с балансировкой.

----------- несколько записей ----------------

create table #MyPi (MyPi decimal(17,2))
Declare @mycounter int
set @mycounter =1 

while @mycounter <> 500000
begin
insert into #MyPi(Mypi)
values (round(3.14159,3))
set @mycounter = @myCounter +1 
end

------------- Одиночная запись ----------------

create table #MyPi2 (MyPi decimal(17,2))
insert into #MyPi2(Mypi)
values (3.14159)

Результаты моего теста (500 тыс. Записей)

select  sum(Mypi) SumMyPi, sum(cast(Mypi as float))SumMyPiAsFloat from #MyPi

SumMyPi         SumMyPiAsFloat
1569996.86  1569996.85998705

1 запись

select  Mypi, cast(Mypi as float) MypiAsFloat from #MyPi2

Mypi    MypiAsFloat
3.14    3.14
...