查找Access中多个表的所有可能排列(具有特定值)

时间:2013-12-12 15:28:11

标签: sql ms-access permutation

第一次发布海报,很长一段时间潜伏着。我从这个网站上学到了很多东西。

好的,首先我在excel中创建了代码但是我知道它非常低效(嵌套用于循环)并且运行需要几个小时(现在我运行6个单独的excel线程,它仍然需要5-6个每个线程经过大约500万次排列的小时数。)

我的想法是,Access将是一个更好的方法来实现我的目标,但我几乎没有关于Access的知识。 (我确实将所有表导入Access中)

基本上,我正在查看7个项目的2个标准(来自7个表格中的每个项目1个项目),其中一个组合值必须大于特定数字,而其他组合值必须小于特定数字。也必须没有重复项(表之间有一些重复)。

试图更好地解释:

表1 __表2 __表3 ......

1,x,y __ 1,x,y __ 1,x,y

2,x,y __ 2,x,y __ 2,x,y

.....

10,x,y __ 6,x,y __ 7,x,y

我正在寻找的是表1中的项目组合 - 表7没有重复项,所有x值加在一起>特定数字和所有y值加在一起<具体数字。

所以最终它会产生一些看起来像的东西:

1,x,y

7,x,y

2,x,y

10,x,y

3,x,y

4,x,y

6,x,y

所有x的总和>指定的号码

所有y的总和<指定的号码

希望这足以解释我的问题。任何帮助将不胜感激!

编辑 - 我现在获得了更多信息,感谢下面的帮助...这里是我所在的地方:

使用类似于下面的联合查询。

我仍然无法弄清楚如何将结果基于价值和成本字段的总和。我需要将值字段总数大于特定数字,并且成本字段总计低于特定数字。

Select Category, Name, Value, Cost

From Table

Where Category ="1"

Union

Select Category, Name, Value, Cost

From Table

Where Category ="2"

.... ....

1 个答案:

答案 0 :(得分:1)

我认为您的解决方案不在 UNION 中,因为 UNION 不会对值进行分组。我认为你从中查询的是以下扩展到7个表的查询。我用三个做了,因为你可以更好地理解基础知识。

SELECT T1.NAME, T1.VALUE, T1.COST, 
       T2.NAME, T2.VALUE, T2.COST, 
       T3.NAME, T3.VALUE, T3.COST
FROM TABLE AS T1, TABLE AS T2, TABLE AS T3
WHERE T1.CATEGORY = '1'
  AND T2.CATEGORY = '2'
  AND T3.CATEGORY = '3'
  AND T1.VALUE + T2.VALUE + T3.VALUE > X
  AND T1.COST+ T2.COST + T3.COST < Y

X和Y是您指定的值。你必须为你的价值取代它们。

请注意,通过这种方式,您可以在同一行中拥有用于标识组的所有值。我希望你能找到的是什么。