SQL:减少结果集的大小

标签 sql sql-server

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),但其他所有组合都会给我带来 算术溢出错误。 有没有办法可以截断该列?

最佳答案

您可以转换列的数据类型:

       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:减少结果集的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31156847/

相关文章:

java - 如何重用取决于执行结果的PreparedStatement

mysql - 我怎样才能正确地按阶梯进行排序?

mysql - 从 2 个连接表中选择最新数据

java - Android从sqlite数据库中获取多个项目

sql-server - 附加sql server 2012错误,无法打开物理文件

sql - 为什么 PostgreSQL 9.5 的 CUBE、ROLLUP 和 GROUPING SETS 会比等效的 UNION 慢?

sql server数据透视表查询

sql-server - 在使用游标sql处理之前计算行数

java - 从数据库中检索 java 中的完整日期

java - SQL Server 的 JDBC 结果集