首页 > 解决方案 > 基于格式化字符串的创建将值相加

问题描述

我只是在学习如何在 SQL 表中操作字符串,现在正在尝试将字符串操作与列值计算结合起来。我的问题是,我将用“xx-yyyyyyy”表示的序列号限制为其前两个值(不带连字符),然后在创建这些新序列号后将成本值(与这些序列值相关)相加。但是,当我将成本值加在一起时,由于序列值未加在一起(输出表中的重复序列值),我得到了不正确的结果。我的问题是,我该如何输入我的代码,这样我的输出中就没有重复的序列值,并且所有值(不包括 NULL)都加在一起?

我正在使用的示例表如下所示:

 ____Serial____|____Cost____
1| xx-yyyyyy   | $aaa.bb
2| xx-yyyyyy   | $aaa.bb
3|    ...      |    ...

这是我目前尝试过的代码:

SELECT left(Serial, CHARINDEX('-', Serial)-1) AS NewSerial, sum(cost) AS TotalCost
FROM table
WHERE CHARINDEX('-', serial) > 0
GROUP BY Serial
ORDER BY TotalCost DESC

结果确实将成本值加在一起,但确实留下了重复的 NewSerial 值(我认为这是由于 GROUP BY 子句)。

Output (From my code):
_|___NewSerial____|____TotalCost____
1|     ab         |    $abc.de
2|     cd         |    $abc.de
3|     ab         |    $abc.de
4|     ef         |    $abc.de
5|     cd         |    $abc.de

我如何才能在该区域内修复/解决此问题,以便 NewSerial 值全部加在一起,而不是像我的输出中那样保持分开?

标签: sqlsql-server

解决方案


您需要重复以下表达式GROUP BY

SELECT left(Serial, CHARINDEX('-', Serial)-1) AS NewSerial, sum(cost) AS TotalCost
FROM table
WHERE CHARINDEX('-', serial) > 0
GROUP BY left(Serial, CHARINDEX('-', Serial)-1)
ORDER BY TotalCost DESC

推荐阅读