Oracle SQL:如何按ID拼接产品值并指定排序规则?
按指定顺序拼接产品列的实现方案
现有表表1包含ID、Product、UniqueProd# On ID三列,其中UniqueProd# On ID用于统计每个ID下排除"Other"的唯一产品数量。现在需要新增ProductConcat列,实现按ID分组拼接Product的值,且拼接结果遵循指定的产品顺序(例如:香蕉 → 橙子 → 苹果)。
核心实现逻辑
利用数据库的字符串聚合函数,配合自定义排序规则控制拼接顺序,以下是主流数据库的实现代码:
MySQL 版本
SELECT ID, Product, `UniqueProd# On ID`, -- 按指定顺序拼接产品,需排除Other可在CASE中过滤 GROUP_CONCAT( Product ORDER BY CASE Product WHEN '香蕉' THEN 1 WHEN '橙子' THEN 2 WHEN '苹果' THEN 3 ELSE 4 -- 其他产品排在末尾 END SEPARATOR ', ') AS ProductConcat FROM 表1 GROUP BY ID, Product, `UniqueProd# On ID`;
SQL Server 版本
SELECT ID, Product, [UniqueProd# On ID], STRING_AGG( Product, ', ') WITHIN GROUP (ORDER BY CASE Product WHEN '香蕉' THEN 1 WHEN '橙子' THEN 2 WHEN '苹果' THEN 3 ELSE 4 END) AS ProductConcat FROM 表1 GROUP BY ID, Product, [UniqueProd# On ID];
关键说明
- 通过
CASE语句为指定产品分配排序优先级,数字越小,拼接时越靠前 - 若需排除"Other"产品不参与拼接,可修改聚合函数为
CASE WHEN Product != 'Other' THEN Product END实现过滤 SEPARATOR参数可自定义拼接分隔符,示例中使用,(逗号加空格)
内容的提问来源于stack exchange,提问作者Noobanalyst415
相关产品推荐
相关产品推荐

