Msg 8115 Ошибка арифметического переполнения при попытке преобразовать сумму баланса

Мне нужна помощь. Я создал представление в SQL 2012, которое будет принимать идентификатор лица и отображать дату входа и баланс, который был введен в эту дату. Я попытался преобразовать баланс и даже попытался увеличить поля ввода даты и суммы баланса с 10.

В моем файле balance_amount не более 5 цифр перед десятичной дробью и 6 цифр после десятичной.

Мне нужен вывод, чтобы быть:

people_org_code_id | entry_date1 | balance1 | entry_date2 | balance2
--------------------------------------------------------------------
001234567            01/01/2018     2455.33   02/26/2018     358.33
005212222            01/24/2018     25.00           

и так далее, пока он не достигнет и entry_date15, и balance15.

Код, который у меня пока есть:

    SELECT people_org_code_id, 
   [entry_date1]      AS entry_date1, 
   [balance_amount1]  AS balance1, 
   [entry_date2]      AS entry_date2, 
   [balance_amount2]  AS balance2, 
   [entry_date3]      AS entry_date3, 
   [balance_amount3]  AS balance3, 
   [entry_date4]      AS entry_date4, 
   [balance_amount4]  AS balance4, 
   [entry_date5]      AS entry_date5, 
   [balance_amount5]  AS balance5, 
   [entry_date6]      AS entry_date6, 
   [balance_amount6]  AS balance6, 
   [entry_date7]      AS entry_date7, 
   [balance_amount7]  AS balance7, 
   [entry_date8]      AS entry_date8, 
   [balance_amount8]  AS balance8, 
   [entry_date9]      AS entry_date9, 
   [balance_amount9]  AS balance9, 
   [entry_date10]     AS entry_date10, 
   [balance_amount10] AS balance_amount10, 
   [entry_date11]     AS entry_date11, 
   [balance_amount11] AS balance_amount11, 
   [entry_date12]     AS entry_date12, 
   [balance_amount12] AS balance_amount12, 
   [entry_date13]     AS entry_date13, 
   [balance_amount13] AS balance_amount13, 
   [entry_date14]     AS entry_date14, 
   [balance_amount14] AS balance_amount14, 
   [entry_date15]     AS entry_date15, 
   [balance_amount15] AS balance_amount15 
   FROM  (SELECT people_org_code_id, 
          col + '_' + CONVERT(NVARCHAR(2), rw, 1) AS col, 
          val 
   FROM   (SELECT cc.people_org_code_id, 
                  CONVERT(NVARCHAR(13), Cast(cc.entry_date AS DATE), 1) 
                  AS 
                  entry_date, 
                  CONVERT(NVARCHAR(13), Cast( 
                  cc.balance_amount AS decimal(5,2))) AS balance_amt, 
                  Row_number() 
                    OVER( 
                      partition BY cc.people_org_code_id 
                      ORDER BY cc.entry_date) 
                  AS rw 
           FROM   chargecredit cc) AS q1 
  UNPIVOT (val 
  FOR col IN (entry_date, balance_amt)) AS u1) x 
  PIVOT (Max(val) 
  FOR col IN ([entry_date1], 
                    [balance_amount1], 
                    [entry_date2], 
                    [balance_amount2], 
                    [entry_date3], 
                    [balance_amount3], 
                    [entry_date4], 
                    [balance_amount4], 
                    [entry_date5], 
                    [balance_amount5], 
                    [entry_date6], 
                    [balance_amount6], 
                    [entry_date7], 
                    [balance_amount7], 
                    [entry_date8], 
                    [balance_amount8], 
                    [entry_date9], 
                    [balance_amount9], 
                    [entry_date10], 
                    [balance_amount10], 
                    [entry_date11], 
                    [balance_amount11], 
                    [entry_date12], 
                    [balance_amount12], 
                    [entry_date13], 
                    [balance_amount13], 
                    [entry_date14], 
                    [balance_amount14], 
                    [entry_date15], 
                    [balance_amount15] )) p1 

1 ответ

Вам нужно изменить свой состав на Cast(cc.balance_amount AS decimal(11,6))

Десятичные типы данных определены следующим образом:

DECIMAL (точность, масштаб)

Точность - это количество цифр в числе. Шкала - это число цифр справа от десятичной точки в числе. Например, число 123,45 имеет точность 5 и шкалу 2.

Для получения дополнительной информации см. https://docs.microsoft.com/en-us/sql/t-sql/data-types/precision-scale-and-length-transact-sql

Другие вопросы по тегам