MS Access复杂的订单依据

时间:2009-11-04 17:28:26

标签: sql ms-access

对于我正在我的PHB工作的发票应用程序已决定发票上列出的销售部件需要以非常独特的顺序进行。如果可能的话,我想用一个sql语句来完成这个。

基本上,订单必须是这样的

  1. 最昂贵的部分(但只有当另一部分列在$ 0时)
  2. 所有部件均列在$ 0
  3. 按part_id
  4. 的顺序列出的所有其他部分(或所有部分)
  5. part_id为(“MISC-30”,“MISC-31”,“TEMP”)的所有部件
  6. 负数量的所有部分[返回]
  7. 还有一些需要添加的评论,但必须由代码处理

    到目前为止,我有:

    SELECT * 
    FROM order_part 
    WHERE ordid = 1234 
    ORDER BY qty > 0, part_id NOT IN("MISC-30","MISC-31","TEMP"), part_id
    

    但是我无法弄清楚如何纳入前两条规则

5 个答案:

答案 0 :(得分:3)

因为很久以前你不得不放弃在这个项目上搞乱;)

Select * 
    , IIF(((Select Count(*) from order_part 
        where orderid = 1234 and price = 0))=0 
           and price = ((select max(price) from       
               order_part where orderid = 1234
           and qty >0 and part_id not in(("MISC-30","MISC-31","TEMP") 
          )), 1
    , IIf(price = 0, 2
    , IIf(part_id IN("MISC-30","MISC-31","TEMP"), 4
    , IIf(qty < 0, 5
    , 3)))) AS Part_Sort
from order_part
Order By Part Sort, part_id

真的希望Access有案例陈述。但是您可以构建这些嵌套的IIf并根据您的逻辑提供排序编号。最后的“ELSE”部分是#3,因为按部件ID排序是第三选择/不属于这些其他类别。对不起,我知道括号错了。

答案 1 :(得分:2)

也许您的意思是想要一个单一记录集,即您的SQL输出可以由您的发票应用程序处理?

你有没有想过这个问题 - 它不漂亮但可能有用。

Select * From
(
    Select 1 as MyOrder .... rest of criteria 1
    Union
    Select 2 as MyOrder .... rest of criteria 2
    Union
    Select 3 as MyOrder .... rest of criteria 3
    Union
    Select 4 as MyOrder .... rest of criteria 4
    Union
    Select 5 as MyOrder .... rest of criteria 5
)
Order by MyOrder

答案 2 :(得分:1)

如果用一个select语句无法做到这一点,我会编写5个查询,每个查询都会获得所需的末尾查询部分而没有交叉点。然后为每个查询添加SortBy整数值并将它们组合在一起(按SortBy值排序)。

我在SQL Server中完成了这个,我猜这在Access中是可行的......

答案 3 :(得分:1)

即使单个查询可以实现这一点,我认为您应该为自己和未来的开发人员做出个别查询并以其他方式将结果结合在一起。

唯一的例外是性能是100%完全关键,你需要保存每微秒。

但作为一名开发人员和经理,我宁愿看到一个初级团队成员可以解决的可维护代码,而不是一些超级麻烦的SQL语句。

答案 4 :(得分:-1)

我的建议:让那些让你浪费宝贵时间的家伙做这样的虚拟事情!他必须是奴隶司机还是什么?如果你不能解雇他,请离开公司。