Я создал новую работу 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