sql - 基于格式化字符串的创建将值相加
问题描述
我只是在学习如何在 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 值全部加在一起,而不是像我的输出中那样保持分开?
解决方案
您需要重复以下表达式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
推荐阅读
- java - Spring JPA ManyToOne findByJoinColumn / findByForegignKey
- swift - 为什么我可以用 List 列出一个数组,但不能用 For 循环和 Text 列出?
- python - 如何将我的 main() 函数输出为 CSV 文件
- javascript - 如何允许用户更改 JSON 数组
- c++ - 如何获取 C++ 项目中其他项目文件的路径?
- css - 用于 CSS 的 Opentype `name` 记录
- html - Dompdf 从不应用任何 css 文件
- android-studio - 较长的字符串数组条目导致构建失败
- javascript - 如何每 100 毫秒将元素的不透明度降低 0.1?
- c# - 如何通过分组到列表创建MVC chtml视图