在mysql查询中聚合记录

时间:2016-12-23 08:39:55

标签: mysql

我有一张如下表所示的表格:

document no  |  payment terms | Purchase order no
-------------------------------------------------
1700000000   |  NT30          | 
-------------------------------------------------
1700000000   |                | HPI115881
-------------------------------------------------
1700000000   |                | HPI115881
-------------------------------------------------
1700000002   |  NT30          |
-------------------------------------------------
1700000002   |                | HPI163799
-------------------------------------------------
1700000003   |  NT30          |
-------------------------------------------------
1700000003   |                | HPI160969
-------------------------------------------------
1700000004   |  NT30          |
-------------------------------------------------
1700000004   |                | HPI13641

正如您所看到的,对于相同的文件号,我有2条记录 - 一条记录付款条件,另一条记录采购订单号

我想要的是所有文档编号只有一行,所有三列填充如下:

document no   payment terms    Purchase order no
1700000000       NT30              HPI115881

对此的任何帮助都将受到高度赞赏。感谢。

2 个答案:

答案 0 :(得分:0)

我不知道是否有更快的方法,但你可以用两种不同的方式解决问题(至少):

方法1(全部在内存中):

  • 选择付款条件不为空(或为空)的所有记录
  • 选择采购订单号不为空(或为空)的所有记录
  • 更新第一个选择中的所有记录
  • 删除第二个
  • 中的所有记录

方法2:

  • 使用MySQL存储过程将表拆分为两个(这里有一些帮助dnsh
  • 使用MySQL存储过程基于相同的索引合并两个表(文档号)

答案 1 :(得分:0)

只是一个建议,您可以通过以下查询来实现

select
    document_no,
    group_concat(distinct 'payment terms') as 'payment terms',
    group_concat(distinct 'Purchase order no') as 'Purchase order no'
from table
group by document_no

group by document_no将显示document_no的不同,同时你可以group_concat,所以它会跳过空值并显示预期的数据。