1、场景
仓库使用系统实现了先进先出,给仓库的备货单原先设计如下模式:
tx3表:
不同的批次分开行显示,仓库从这个备货单可以知道这个货品需要备货哪些批次,多少数量
用了几天,仓库对此备货单样式提出如下看法
- 一个备货单很多个货品,一个货品如果存在很多批次,一个备货单需要打印几张纸,比较麻烦
- 不够直观,希望很直观看到某个货品总的需求量,需要备货的批次与分别的数量
于是,使用group_concat实现此需求
2、group_concat的用法
group_concat的用途:按分组来把多行数据显示在一行,将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
完整语法:group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
说明:通过使用distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号。
具体使用如下,以零件号,品名,snp分组,把批次,此批次的数量,此批次的箱数连接起来,逗号分割
select 零件号, 品名, snp, sum(需求数量) 需求数量, group_concat(批次,':',需求数量,'个:',箱数,'箱') 批次信息 from tx3 group by 零件号,品名,snp
结果:
从仓库备货的角度,这个样式一看就知道货品总的需求数,需要备货的批次信息,看上去很直观
同时,数据行也不会太多,一般打印一张A4纸就可以
确实要三现主义,不站在仓库的角度还真考虑不到这种细节