首页 > 解决方案 > 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 行,则将行合并为一个。在真实数据中,可能有很多行要总结或根本没有——它们都可能是唯一的。

标签: sqlsql-server

解决方案


这看起来像group by

select SO, Customer, Product, Description, sum(Quantity), sum(Extension),   Country
from t
group by SO, Customer, Product, Description, Country;

请注意,这quantity看起来很奇怪。SQL 中的数字不显示前导零——并且数字应该存储为数字,而不是字符串。


推荐阅读