问题:公司采购系统中导出采购明细,领导要求找出每个料件的最低价,并且要知道是哪家供应商采购的。
这个问题在采购工作中不难碰到,在料件采购记录很少的时候或者采购料件品种不多的情况下通过筛选还是能够容易实现的,但是当采购记录或者采购品种很杂的情况下那就是一项很烦恼的事情了,那么我们如何快速的实现查找呢?
我们知道,一般从公司系统里导出的记录如同下表的形式:
料号 |
供应商 |
单价 |
A001 |
ABS |
0.05 |
A002 |
BAS |
0.06 |
A003 |
SCD |
0.23 |
A001 |
DCS |
0.32 |
A003 |
ASC |
0.45 |
A004 |
SCD |
0.56 |
A002 |
DCS |
0.74 |
A005 |
FRD |
0.32 |
A003 |
DRF |
0.25 |
A004 |
DRS |
0.26 |
A005 |
ASD |
0.54 |
我们在EXCEL中实现这一功能,很容易想到用数据透视表:
行标签 |
最小值项:单价 |
A001 |
0.05 |
A002 |
0.06 |
A003 |
0.23 |
A004 |
0.26 |
A005 |
0.32 |
但是这样做无法同时关联到哪个供应商,必须再插入辅助列,用VLOOKUP函数来实现供应商的关联:
料号 |
辅助列 |
供应商 |
单价 |
A001 |
A0010.05 |
ABS |
0.05 |
A002 |
A0020.06 |
BAS |
0.06 |
A003 |
A0030.23 |
SCD |
0.23 |
A001 |
A0010.32 |
DCS |
0.32 |
A003 |
A0030.45 |
ASC |
0.45 |
A004 |
A0040.56 |
SCD |
0.56 |
A002 |
A0020.74 |
DCS |
0.74 |
A005 |
A0050.32 |
FRD |
0.32 |
A003 |
A0030.25 |
DRF |
0.25 |
A004 |
A0040.26 |
DRS |
0.26 |
A005 |
A0050.54 |
ASD |
0.54 |
行标签 |
最小值项:单价 |
辅助列 |
供应商 |
||
A001 |
0.05 |
A001 |
0.05 |
A0010.05 |
ABS |
A002 |
0.06 |
A002 |
0.06 |
A0020.06 |
BAS |
A003 |
0.23 |
A003 |
0.23 |
A0030.23 |
SCD |
A004 |
0.26 |
A004 |
0.26 |
A0040.26 |
DRS |
A005 |
0.32 |
A005 |
0.32 |
A0050.32 |
FRD |
总体上感觉这样做有点麻烦,那么我们是否可以通过ACCESS来实现呢?
下表是我们通过ACCESS查询实现的结果,和上面用EXCEL实现的结果一样。
料号 |
最小单价 |
供应商 |
A001 |
0.05 |
ABS |
A002 |
0.06 |
BAS |
A003 |
0.23 |
SCD |
A004 |
0.26 |
DRS |
A005 |
0.32 |
FRD |
实现的步骤如下:
首先我们将原表导入ACCESS,命名为价格表,然后在原表的基础上做个查询:
SELECT 价格表.*, [料号] & [单价] AS 条件
FROM 价格表;
将查询命名为价格查询,然后在上述价格查询的基础上再做一个最低价查询:
SELECT 价格查询.料号, Min(DMin("单价","价格查询","料号='" & [料号] & "'")) AS 最小单价
FROM 价格查询
GROUP BY 价格查询.料号;
将此查询命名为最低价查询,然后在最低价查询的基础上再做一个查询:
SELECT 最低价查询.料号, 最低价查询.最小单价, [料号] & [最小单价] AS 条件
FROM 最低价查询;
将此查询命名为最低价查询2。最后再做一个结果查询:
SELECT 最低价查询.料号, 最低价查询2.最小单价, 价格查询.供应商
FROM 最低价查询2 INNER JOIN 价格查询 ON 最低价查询2.条件=价格查询.条件;
将此查询命名为结果查询,运行此查询就得到我们要的结果了。
其实不管是EXCEL还是ACCESS都用到了辅助列,就是“料号&单价”,否则结果带不出供应商,希望以上实现的思路能帮助到大家。