简体   繁体   中英

Round error Sql Server value

Hello I have a problem on this query for sql server, my problem is on column call TotaleCap, my problem is that TotaleCap should be the result of Quantità for CostoUnitario but the bill does not come back, can you help me? thank you

QUERY:

DECLARE @T AS TABLE (Descrizione VARCHAR(5000), Totale MONEY, DescrizioneEstesa VARCHAR(5000), Immagine VARCHAR(5000), CostoUnitario MONEY, Quantita MONEY, DescrizioneDis VARCHAR(5000)) INSERT INTO @T select Capitolo.Descrizione,(SottoCapitolo.Quantita * SottoCapitolo.CostoUnitario) as Totale, SottoCapitolo.DescrizioneEstesa ,SottoCapitolo.Immagine,SottoCapitolo.CostoUnitario,SottoCapitolo.Quantita,SottoCapitolo.Descrizione as DescrizioneDis from Capitolo inner join SottoCapitolo on SottoCapitolo.IdCapitolo = Capitolo.IdCapitolo where IdPreventivo = '" + IdPreventivo + "' SELECT CASE WHEN ROW_NUMBER() OVER(PARTITION BY a.Descrizione order by a.Descrizione) = 1 THEN a.Descrizione ELSE '' END AS Descrizione,a.DescrizioneDis, round(a.CostoUnitario,0) as CostoUnitario, a.Quantita, round(a.Totale,0) as TotaleCap, a.DescrizioneEstesa, a.Immagine FROM( SELECT 1 AS d, ROW_NUMBER() OVER(PARTITION BY Descrizione order by Descrizione) AS r, Descrizione, Totale, DescrizioneDis, Immagine, CostoUnitario, Quantita, DescrizioneEstesa FROM @T  UNION ALL SELECT 2, 0, Descrizione, SUM(Totale), '', '', '', '', ''  FROM @T  GROUP BY Descrizione  ) AS a ORDER BY a.Descrizione, a.d

Output Screen

在此处输入图片说明

Il problema risiede nel fatto che hai già calcolato il "totale" prima di fare gli arrotondamenti.
Verifica con questo:

select 3.1 AS UNIT, 6 AS QTY, 3.1*6 AS TOT_ESATTO, ROUND(3.1,0) AS UNIT_ROUND, ROUND(3.1*6,0) AS TOT_ROUND, ROUND(3.1,0)*6 AS ERR

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM