在 MS Access 中,我有一个包含几个不同参数的表,如下所示:
元素 | 重量(克) | 最小尺寸(厘米) |
---|---|---|
橙子 | 100 | 5 |
苹果 | 90 | 4 |
香蕉 | 130 | 2 |
葡萄 | 40 | 1 |
它们被分组为集合,如下所示:
盒子 | 内容 |
---|---|
1 | 葡萄 |
2 | 橙子、苹果、香蕉 |
我想生成一份报告,为每个“框”提供或设置每个参数的最小值,如果可能的话,还提供它所对应的元素,如下所示:
盒子 | 最小重量(克) | 具有最小权重的元素 | 最小尺寸(厘米) | 具有最小尺寸的元素 |
---|---|---|---|---|
1 | 40 | 葡萄 | 1 | 葡萄 |
2 | 90 | 苹果 | 2 | 香蕉 |
对我来说,棘手的是,一个类别中值最小的元素通常不会在另一个类别中具有最小值。有没有合理的方法来实现这一点?
答案1
我没有安装 Access,这是 SQLite 中的代码,您可能需要进行一些小的修改。
首先,创建一个查询来汇总所有数据(AllData
):
select Box, Element, weight, SmallestDim
from boxes left join products on boxes.Contents = products.Element;
这是您的主要疑问:
select minWeightItem.Box, minWeightItem.minWeight, minWeightItem.Element, MinDimItem.minDim, minDimItem.Element
from
(select AllData.Box, minWeight, Alldata.Element
from (select Box, min(weight) minWeight from AllData group by Box) minWeight
join AllData on minWeight.Box = AllData.Box and minWeight.minWeight = AllData.weight) minWeightItem
left join (select AllData.Box, minDim, Alldata.Element
from (select Box, min(SmallestDim) minDim from AllData group by Box) minDim
join AllData on minDim.Box = AllData.Box and minDim.minDim = AllData.SmallestDim) minDimItem on minWeightItem.Box = minDimItem.Box;