2016-10-21 2 views
0

У меня есть следующие ВЫБРАТЬ в SQL Server:Типы преобразования SQL Server

SELECT 
    th.CidadeCod, 
    th.ContratoCod, 
    CONVERT(DECIMAL(5,2), (SUM(th.PlacasLidas)/SUM(th.Trafego)) * 100) AS [IndiceOCR] 
FROM 
    controle.TrafegoFaixaHora th 
INNER JOIN ssis.Contratos c ON th.ContratoCod = c.ContratoCod AND th.CidadeCod = c.CidadeCod 
INNER JOIN controle.Equipamentos e ON th.ContratoCod = e.ContratoCod AND th.CidadeCod = e.CidadeCod 
WHERE 
    c.FlagAtivo = 1 AND e.FlagOcr = 1 
GROUP BY 
    th.CidadeCod, 
    th.ContratoCod 

Но возвращается ошибка:

Msg 8115, Level 16, состояние 2, строка 2 арифметическая ошибка переполнения преобразование выражения в тип данных int.

Что мне делать?

+3

Каковы типы данных 'th.PlacasLidas' и' th.Trafego'? – ughai

+0

Если вы удаляете инструкцию CONVERT, какое значение get возвращается? Я думаю, что, возможно, размер десятичной суммы, которую вы конвертируете, слишком мал для вашего результата, возможно? –

+0

перерыв в этой колонке, «CONVERT (DECIMAL (5,2), (SUM (th.PlacasLidas)/SUM (th.Trafego)) * 100)« & попробуйте, для какой операции он показывает ошибку. Break & debug ... – Aditya

ответ

0

Попробуйте

SELECT 
    th.CidadeCod, 
    th.ContratoCod, 
    (SUM(CONVERT(DECIMAL(18,2),th.PlacasLidas))/SUM(th.Trafego)) * 100 AS [IndiceOCR] 
FROM 
    controle.TrafegoFaixaHora th 
INNER JOIN ssis.Contratos c ON th.ContratoCod = c.ContratoCod AND th.CidadeCod = c.CidadeCod 
INNER JOIN controle.Equipamentos e ON th.ContratoCod = e.ContratoCod AND th.CidadeCod = e.CidadeCod 
WHERE 
    c.FlagAtivo = 1 AND e.FlagOcr = 1 
GROUP BY 
    th.CidadeCod, 
    th.ContratoCod 

Это ошибка, потому что ваше происходить подавление числа больше пяти цифр.

Я считаю, что когда вы делите два int, вам нужно преобразовать их перед операцией.

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