【问题标题】:SQL sum is not functioningSQL 总和不起作用
【发布时间】:2018-05-24 19:01:34
【问题描述】:

我正在尝试根据 ID 将总佣金加在一起,但它会产生单独的佣金金额。我需要根据去年提取数据

SELECT
fld.fa_id
,sum(commission_amt) as 'Commission Amount'
,date_id
FROM [dbo].[fa_dim] fa, [dbo].[product_summary] fld
WHERE fa.fa_id = fld.fa_id 
AND fld.date_id > 20170523
GROUP BY  fld.fa_id , fld.commission_amt , date_id
ORDER BY fld.fa_id

我得到的结果如下所示:

ID    Commission
7        50
7        12
7        5
8        20
8        10

我需要它们看起来像这样:

ID      Commission 
7           67
8           30 

【问题讨论】:

标签: sql sql-server sum aggregate


【解决方案1】:

删除 group by 列表中的 commission_amt 列:

SELECT
fld.fa_id
,sum(commission_amt) as 'Commission Amount'
,date_id
FROM [dbo].[fa_dim] fa, [dbo].[product_summary] fld
WHERE fa.fa_id = fld.fa_id 
AND fld.date_id > 20170523
GROUP BY  fld.fa_id ,  date_id
ORDER BY fld.fa_id

【讨论】:

    【解决方案2】:

    group byselect 中的列过多:

    SELECT fld.fa_id, sum(commission_amt) as [Commission Amount]
    FROM [dbo].[fa_dim] fa JOIN
         [dbo].[product_summary] fld
         ON fa.fa_id = fld.fa_id AND fld.date_id > 20170523
    GROUP BY fld.fa_id 
    ORDER BY fld.fa_id;
    

    group by 应包含唯一定义结果集中每一行的键。因为您希望每个 fld.fa_id 有一行,所以这是 GROUP BY 中唯一需要的列。

    请注意,我还修复了 JOIN 语法。学习使用正确、明确、标准的JOIN 语法。将列别名放在单引号中也是一个坏主意。 SQL Server 中的转义字符是方括号。更好的是不需要转义的列别名。

    【讨论】:

      猜你喜欢
      • 2018-12-13
      • 2017-07-31
      • 2021-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-15
      相关资源
      最近更新 更多