Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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
在SQL中对列的不同值进行分组/聚合_Sql_Sql Server_Sum_Aggregate - Fatal编程技术网

在SQL中对列的不同值进行分组/聚合

在SQL中对列的不同值进行分组/聚合,sql,sql-server,sum,aggregate,Sql,Sql Server,Sum,Aggregate,DB是SQL Server 2008 表A: “标识符”列中的值:A、B、C、D、E、F “余额”列中的值:10、100、30、50、70、55 期望结果集: “标识符\新”列中的值:Z、Y、X 总和(余额)栏中的值:40170105 汇总余额的逻辑映射: 标识符A和C的合计和组余额为Z。 标识符B和E的合计和组余额为Y。 标识符D和E的总和和组余额为X 我可以在一个sql中获得上述所需的结果集吗 谢谢试试这个: SELECT x.v AS Identifier_New, SUM(Balance

DB是SQL Server 2008

表A:

“标识符”列中的值:A、B、C、D、E、F “余额”列中的值:10、100、30、50、70、55

期望结果集:

“标识符\新”列中的值:Z、Y、X 总和(余额)栏中的值:40170105

汇总余额的逻辑映射:

标识符A和C的合计和组余额为Z。 标识符B和E的合计和组余额为Y。 标识符D和E的总和和组余额为X

我可以在一个sql中获得上述所需的结果集吗

谢谢

试试这个:

SELECT x.v AS Identifier_New, SUM(Balances)
FROM mytable
CROSS APPLY (SELECT CASE Identifier
                      WHEN 'A' THEN 'Z'
                      WHEN 'C' THEN 'Z'
                      WHEN 'B' THEN 'Y'
                      WHEN 'E' THEN 'Y'
                      WHEN 'D' THEN 'X'
                      WHEN 'F' THEN 'X'
                    END ) AS x(v)
GROUP BY x.v 
试试这个:

SELECT x.v AS Identifier_New, SUM(Balances)
FROM mytable
CROSS APPLY (SELECT CASE Identifier
                      WHEN 'A' THEN 'Z'
                      WHEN 'C' THEN 'Z'
                      WHEN 'B' THEN 'Y'
                      WHEN 'E' THEN 'Y'
                      WHEN 'D' THEN 'X'
                      WHEN 'F' THEN 'X'
                    END ) AS x(v)
GROUP BY x.v 

回答得好。这和我的有性能上的区别吗?或者交叉应用基本上是作为速记吗?@StanShaw我认为交叉应用在这种情况下只是语法上的糖分。两个查询应该具有相同的性能。感谢您提供的信息-我将阅读并开始使用它。回答不错。这和我的有性能上的区别吗?或者交叉应用基本上是作为速记吗?@StanShaw我认为交叉应用在这种情况下只是语法上的糖分。这两个查询应该有相同的性能。感谢您提供的信息-我将阅读并开始使用它。我尝试了Stan和Giorgos的两个答案,两个都很有效。谢谢大家。我试了Stan和Giorgos的两个答案,结果都很好。谢谢各位。