sql - SQL - 根据前一行的值有条件地组合行
问题描述
我认为最好用一个例子来解释我的问题:
样本数据
所以 | 顾客 | 产品 | 描述 | 数量 | 扩大 | 国家 |
---|---|---|---|---|---|---|
01 | xxx | 123 | 产品A | 01 | 20.00 | 美国 |
02 | 年年 | 456 | 产品B | 02 | 25.00 | 中国 |
02 | 年年 | 456 | 产品B | 01 | 12.50 | 中国 |
02 | 年年 | 789 | 产品C | 01 | 50.00 | 墨西哥 |
03 | zzz | 789 | 产品C | 01 | 50.00 | 墨西哥 |
03 | zzz | 789 | 产品C | 01 | 50.00 | 墨西哥 |
期望的输出:
所以 | 顾客 | 产品 | 描述 | 数量 | 扩大 | 国家 |
---|---|---|---|---|---|---|
01 | xxx | 123 | 产品A | 01 | 20.00 | 美国 |
02 | 年年 | 456 | 产品B | 03 | 37.50 | 中国 |
02 | 年年 | 789 | 产品C | 01 | 50.00 | 墨西哥 |
03 | zzz | 789 | 产品C | 02 | 100.00 | 墨西哥 |
所以我遇到的关键问题是按 SO 分组,然后如果有重复的 Product 行,则将行合并为一个。在真实数据中,可能有很多行要总结或根本没有——它们都可能是唯一的。
解决方案
这看起来像group by
:
select SO, Customer, Product, Description, sum(Quantity), sum(Extension), Country
from t
group by SO, Customer, Product, Description, Country;
请注意,这quantity
看起来很奇怪。SQL 中的数字不显示前导零——并且数字应该存储为数字,而不是字符串。
推荐阅读
- java - 从Java中的字符串末尾减去3个字符
- abap - 应用程序日志 (BC-SRV-BAL) 有哪些用例
- python - Django:匹配 URL 模式以在 404 中显示数据结果
- javascript - 如何在不使用承诺的情况下重写 swal 提示
- apache-zookeeper - Zookeeper api 存在方法版本
- java - 每次调用函数时如何获取当前 gps 位置?
- node.js - 无法提供反应应用程序 - 未捕获的语法错误:意外的令牌 <
- r - 如何在带有 ggplotly() 的闪亮应用程序中使用 plotlyProxy() 以使绘图渲染得更快
- sonarqube - 扫描分支时,SonarQube 不会在项目主页上显示代码覆盖率
- javascript - 制表符 - 基于另一个制表符过滤