0

我有一个 MSSQL 查询,我在其中进行总计,这是通过求和获得的值的总和。

   select
      s.name
     ,SUM(b.dAmount) as total
     ,SUM(SUM(b.dAmount)) as grandtotal
   from t_sales a
        left outer join t_cust b on (b.dId=a.id)
   where a.custId=@customerId
   GROUP BY b.name; 

我可以获得名称和总计,但总计不返回任何值。请让我知道获取另一个值的 SUM 的值的 SUM 的正确方法是什么。谢谢

4

3 回答 3

1

尝试这个:

 select
      b.name
     ,SUM(b.dAmount) as total
     , SUM(SUM(b.dAmount)) OVER () as grandtotal

   from t_sales a
        left outer join t_cust b on (b.dId=a.id)
   where a.custId=@customerId
   GROUP BY b.name; 
于 2013-09-15T23:22:48.063 回答
0

在 MySQL 中,如果不使用嵌套子查询或使用GROUP BY WITH ROLLUP

对于您的情况,我建议只使用WITH ROLLUP关键字,这将在结果集中添加另一行总计。它还将避免在集合的每一行上返回相同的总数。

  SELECT IFNULL(s.name, 'Total'), SUM(b.dAmount) as total
   FROM t_sales a
        LEFT OUTER JOIN t_cust b ON (b.dId = a.id)
   WHERE a.custId = @customerId
   GROUP BY b.name WITH ROLLUP; 

如果您不直接显示结果,则可以删除该IFNULL(s.name, 'Total')位 - 超级聚合将在不在SUM()

于 2013-09-15T23:01:16.433 回答
0

你也可以试试这个

create table #t_sales (name varchar(100),amount numeric(18,2))  

INSERT INTO #t_sales (name,amount)
values  ('A',100.00)
    ,('B',200.00)
    ,('C',300.00)
    ,('C',400.00)

INSERT INTO #t_sales (name,amount)
values  ('A',100.00)
    ,('B',200.00)
    ,('C',300.00)
    ,('C',400.00)

SELECT CASE WHEN (GROUPING(name) = 1) THEN 'GRAND TOTAL'
        ELSE ISNULL(name, ' ')
   END AS [type]
   ,SUM(amount) AS TOTAL
FROM #t_sales
GROUP BY name WITH ROLLUP  
于 2013-09-16T01:28:02.373 回答