2014-12-16 4 views
0

Ниже приведен код, который я использую в настоящее время, для которого нужно округлить результат до 2 десятичных знаков. Я предполагаю, что у меня слишком много, слишком мало или в неправильном месте, когда дело доходит до «()», и мои глаза истекают кровью, пытаясь сломать его и перестроить. Может кто-нибудь помочь мне выяснить, что я сделал неправильно.Округление до 2 знаков после запятой

,Round((((Sum(case when S.StatType = 'Slot' then S.CashIn - S.CashOut - S.JackPot Else 0 end)*.75)+ 
     (Sum(case when S.StatType = 'Pit' then S.CashIn + S.CreditIn + S.ChipsIn + S.FrontIn - S.CashOut Else 0 end)*.4))/Nullif(Count(Distinct(S.GamingDate)),0)),2) as ADL 
+0

Что происходит? –

+2

Слишком много и слишком мало можно просто решить путем подсчета. Кроме того, вы также должны получить синтаксическую ошибку, если они не совпадают. Вы получили сообщение об ошибке? – GolezTrol

+2

Вы пробовали просто отличить результат до десятичного числа, такого как CAST ({ваш результат} как DECIMAL (18,2)), который должен затем автоматически округлить его для вас. –

ответ

1

Cast его в качестве десятичного вместо округления:

CAST((((Sum(case when S.StatType = 'Slot' then S.CashIn - S.CashOut - S.JackPot Else 0 end)*.75)+ 
    (Sum(case when S.StatType = 'Pit' then S.CashIn + S.CreditIn + S.ChipsIn + S.FrontIn - S.CashOut Else 0 end)*.4))/Nullif(Count(Distinct(S.GamingDate)),0)) AS DECIMAL(18,2)) as ADL 
+0

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

+0

Однако, когда я изменил его с (4,2) до (18,2), как Дэвид Шортоза предположил, что он работает отлично. Я не использовал это раньше, вам нужно будет больше взглянуть на эту вещь как десятичную. –

+0

Убедитесь, что AS DECIMAL (4,2) установлен на нужную длину для ваших нужд. Я только что редактировал и увеличил его до 18, но я не уверен, сколько времени вам нужно. – alec

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