[英]SQL: Reduce the size of result set
SELECT p.Distributor, SUM(r.SalesVolume) as Sales,
((Cast(SUM(r.SalesVolume) as decimal(14, 4)) / (SELECT SUM(r.SalesVolume) FROM RawData r)) * 100) as MarketSharesVolume
FROM RawData r
INNER JOIN Product p
ON r.ProductId = p.ProductId
WHERE p.Distributor in ('TF1','WARNER')
GROUP BY p.Distributor;
上述查詢的結果是:
Distributor Sales MarketSharesVolume
WARNER 2836192 58.131470300744400
TF1 268668 5.506702600797200
基本上我希望MarketSharesVolume
有一個像58.1
這樣的值我嘗試更改精度decimal(14, 4)
MarketSharesVolume
decimal(14, 4)
但是每隔一個組合給我一個Arithmetic Overflow error
。 有沒有辦法可以截斷列?
這是一個例子 。 使用ROUND()
獲取正確的值,使用CONVERT()
去除尾隨零。 您可以將此應用於您的查詢。
DECLARE @Val DECIMAL(28, 18) = 58.131470300744400
SELECT CONVERT(decimal(28, 1), ROUND(@Val, 1))
您可以轉換列的數據類型:
SELECT p.Distributor, SUM(r.SalesVolume) as Sales,
CAST( (Cast(SUM(r.SalesVolume) as decimal(14, 4)) / (SELECT SUM(r.SalesVolume) FROM RawData r)) * 100
as decimal(20,1)) as MarketSharesVolume
FROM RawData r
INNER JOIN Product p
ON r.ProductId = p.ProductId
WHERE p.Distributor in ('TF1','WARNER')
GROUP BY p.Distributor;
如果您使用的是SQL Server 2012或更高版本,您甚至可以像這樣使用FORMAT
。
DECLARE @v DECIMAL(18,9) = 234.234342345
SELECT @v,FORMAT(@v,'.00'),CAST(@v as DECIMAL(18,2))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.