Мы тестируем разницу между двумя наборами и видим некоторое противоречивое поведение для округления в операциях UNION/MINUS. Каково объяснение этого?Ошибка округления Teradata, установка операций
Если вы оцениваете только первую строку утверждения Союза (Source-Target), вы получаете одно несоответствие. Это правильно. - Разница в .000005.
Однако, если вы оцениваете только вторую строку, вы не получите возвращенных записей. Это означает, что Teradata оценивает эти два числа как эквивалентные, когда мы делаем Target-Source.
Кроме того, при запуске всего заявления Союза вы получаете 2 несоответствия! Таким образом, он распознает, что Target-Source также отличается.
Как можно 1 + 0 = 2? т. е. не должна ли мощность объединения между двумя наборами быть суммой мощностей (игнорируя дубликаты.)
Существует еще один пример прилагаемого.
пример, описанный:
WITH SOURCE_RESULT(TEST) AS (
SELECT cast(.0296250 as decimal(10,7))
),
TARGET_RESULT(TEST) AS (
SELECT cast(.02962 as decimal(10,5))
)
((SELECT * FROM SOURCE_RESULT) MINUS (SELECT * FROM TARGET_RESULT))
UNION
((SELECT * FROM TARGET_RESULT) MINUS (SELECT * FROM SOURCE_RESULT));
Пример 2:
WITH SOURCE_RESULT(TEST) AS (
SELECT cast(.0843090 as decimal(10,7))
),
TARGET_RESULT(TEST) AS (
SELECT cast(.08431 as decimal(10,5))
)
((SELECT * FROM SOURCE_RESULT) MINUS (SELECT * FROM TARGET_RESULT))
UNION
((SELECT * FROM TARGET_RESULT) MINUS (SELECT * FROM SOURCE_RESULT));
«Предложения типа данных, заголовка и формата, содержащиеся в первом операторе SELECT, определяют информацию о типе данных, заголовке и формате, которые отображаются в конечном результате». См http://www.info.teradata.com/HTMLPubs/DB_TTU_15_10/index.html#page/SQL_Reference/B035_1145_151K/attributes_of_a_set_result_ATTRIBUTES_SET_RESULT.html – dnoeth
@dnoeth: Отлично, первый набор в операции набора определяет схему. Имеет смысл. Однако, это не совсем округление? Это просто вырывает что-либо за пятой десятичной цифрой. Другой разумный .00005 должен округлить и сделать их разными. – foursuits
Teradata поддерживает два способа округления: «круглую половину до четности» и «круглую половину от нуля», http://en.wikipedia.org/wiki/Rounding. Ваша система установлена на # 1: http: // www. info.teradata.com/HTMLPubs/DB_TTU_15_10/SQL_Reference/B035_1143_151K/Numeric_Types.031.64.html – dnoeth