Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 根据特定列求和?_Mysql_Sql Server_Reporting Services_Ssrs 2008 - Fatal编程技术网

Mysql 根据特定列求和?

Mysql 根据特定列求和?,mysql,sql-server,reporting-services,ssrs-2008,Mysql,Sql Server,Reporting Services,Ssrs 2008,我试图只对每个客户的余额求和一次。通常情况下,我会使用一个SUM DISTINCT表达式,但是,有一列将其丢弃,而该行不再是“DISTINCT” 例如: Customer Number - Customer Name - Exception Type - Balance CIF13443 - Paul - 1 - 125 CIF13452 - Ryan - 2 - 85 CIF13

我试图只对每个客户的余额求和一次。通常情况下,我会使用一个SUM DISTINCT表达式,但是,有一列将其丢弃,而该行不再是“DISTINCT”

例如:

Customer Number - Customer Name - Exception Type - Balance
CIF13443        - Paul          - 1              - 125
CIF13452        - Ryan          - 2              - 85
CIF13443        - Paul          - 3              - 125
CIF13765        - Linda         - 1              - 90
在这种情况下,如果我使用SUM DISTINCT,Paul的余额将被求和两次,因为他有一个不同的异常类型,实际上我只希望SSR对每个客户求和一次。一种方法是只对不同客户编号的“余额”求和。可能通过分组客户编号?这在SSR上可能吗?我宁愿不接触SQL数据集

谢谢


欢迎您的任何输入。

您可以使用union清除重复行:

查询1(使用联合):

    ;WITH testdata(CustomerNumber,CustomerName,ExceptionType,Balance)AS(
      SELECT 'CIF13443','Paul','1',125 UNION all
      SELECT 'CIF13452','Ryan ','2',85 UNION all
      SELECT 'CIF13443','Paul','3',125 UNION all
      SELECT 'CIF13765','Linda','1',90
  )
  SELECT CustomerNumber,CustomerName,Balance FROM testdata UNION SELECT NULL,NULL,NULL WHERE 1!=1
/*
  SELECT CustomerNumber,CustomerName,SUM(t.Balance) AS total_balance 
  FROM (
       SELECT CustomerNumber,CustomerName,Balance FROM testdata UNION SELECT NULL,NULL,NULL
  ) AS t WHERE CustomerNumber IS NOT null
  GROUP BY CustomerNumber,CustomerName
*/
;WITH testdata(CustomerNumber,CustomerName,ExceptionType,Balance)AS(
  SELECT 'CIF13443','Paul','1',125 UNION all
  SELECT 'CIF13452','Ryan ','2',85 UNION all
  SELECT 'CIF13443','Paul','3',125 UNION all
  SELECT 'CIF13765','Linda','1',90
)


如果在输出中需要异常类型,则必须将其包含在GROUPBY中。这就是聚合的工作原理。如果没有,您希望看到哪个值?
SUM()OVER…
Sean,我将包含异常类型,以便可以看到每个异常类型的总数。但是,当进行总计时,我只希望看到唯一客户编号的总和。您继续使用SUM DISTINCT。“我不认为它能做你认为它能做的事情。”StevenWhite Inconcievable(抱歉,不得不这么说。)在这种情况下,使用UNION强制进行不同的排序是毫无意义的,并且会给下一个开发人员带来混乱和维护上的麻烦。如果最好的解决方案是在SQL中使用不同的排序,那么就这样说。@WesH我给出了另一个查询。
;WITH testdata(CustomerNumber,CustomerName,ExceptionType,Balance)AS(
  SELECT 'CIF13443','Paul','1',125 UNION all
  SELECT 'CIF13452','Ryan ','2',85 UNION all
  SELECT 'CIF13443','Paul','3',125 UNION all
  SELECT 'CIF13765','Linda','1',90
SELECT CustomerNumber,CustomerName,SUM(t.Balance) AS total_balance 
FROM (
  SELECT CustomerNumber,CustomerName,Balance,ROW_NUMBER()OVER(PARTITION BY CustomerNumber,CustomerName,Balance ORDER BY testdata.ExceptionType) seq FROM testdata 
) AS t WHERE t.seq=1
GROUP BY CustomerNumber,CustomerName