2016-10-21 7 views
0

I持つSQL Serverで、SELECT、次のエラーが返され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 

しかし:

メッセージ8115、レベル16、状態2、行2 算術オーバーフローエラー式をデータ型intに変換します。

どうすればよいですか?あなたの番号が5桁よりも大きいので、

+3

'th.PlacasLidas'と' th.Trafego'のデータ型は何ですか? – ughai

+0

CONVERT文を削除すると、どのような値が返されますか?おそらく、あなたが変換している小数点のサイズはおそらくあなたの結果には小さすぎると思いますか? –

+0

"CONVERT(DECIMAL(5,2)、(SUM(th.PlacasLidas)/ SUM(th.Trafego)))* 100)"と表示されます。ブレーク&デバッグ... – Aditya

答えて

0

は、このエラーoccourこの

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 

を試してみてください。

私はあなたが2つのintを分割するとき、操作の前に1つを変換する必要があると信じています。