2009-06-17 7 views

ответ

8

вместо ROUND(ISNULL(SUM(Price),0),2) вы можете попробовать CAST(ISNULL(SUM(PRICE),0) AS DECIMAL (4,2))

+0

Идеальный и просто напоминает мне основы, когда это необходимо :) – bonCodigo

0

Что тип данных Цена?

ROUND in BOL

SELECT ROUND(123.4545, 2); -- = 123.4500 
GO 
SELECT ROUND(123.45, -2); -- = 100,00 
GO 

Основной тип данных остается неизменным: вы просто круглые, но оставить завершающие нули.

Для 2 десятичного место выходного, вы должны были бы CAST в десятичную (х, 2)

1

Вы могли бы возникли проблемы сортировочные для столбца в вашей среде. Можете попробовать явное литье CAST (ROUND (...) AS NUMERIC (18,4)) или даже попробуйте сделать 0 0.0. Убедитесь, что вы также привязываете столбец с соответствующим типом данных в своем приложении.

Все классные люди используют COALESCE вместо ISNULL. COALESCE переносится, и вы можете иметь столько параметров, сколько хотите (не только два!)

В любом случае, я не уверен, что это был только пример, но у вас также могут быть проблемы с DA с вашими данными, если бы у него не было уже были округлены на этом этапе.

+0

COALESCE работает медленнее, чем ISNULL на MSSQL. Как это круто? – gbn

+2

ISNULL может генерировать лучшие планы выполнения, если они используются в предложении WHERE. Он не оказывает ощутимого влияния на производительность наборов результатов. – Einstein

+0

Так крутые люди непоследовательны? ISNULL в предложениях WHERE, COALECSE в предложениях SELECT ... – gbn

Смежные вопросы