1

在我的数据库中,我有一个包含多个“是/否”行的表,如果它们被选中,我想在上面运行一些选择检查。

 ITEM      ORDERED       ORDER_ID
item1       true            1
item2       false           1
item3       true            2
item4       true            3
item5       true            4
item6       true            4

在我的代码中的 datagridview 中,我想实现这一点。

ORDER      STATUS
  1      not ordered
  2        ordered
  3        ordered
  4        ordered

在我的代码中,我想检查所有订单并检查该订单上订购商品的状态是否为true。如果某个订单上的所有项目的状态为 true,那么我想将我在 ORDER 表中的另一个标志设置为true(ordered)。解决这个问题的最优雅的方法是什么?如果您有类似问题的示例,我将不胜感激。提前致谢。

4

1 回答 1

2

它似乎STATUS意味着是否所有行都ORDER_ID具有ORDERED = True. 如果这是正确的,我认为您可以通过 Access 聚合 ( GROUP BY) 查询获得所需的内容。

True 存储为 -1,False 存储为 0。因此,如果ORDEREDany 的最大值为ORDER_ID0,则您知道该订单中至少有一件商品尚未订购。如果最大值为 -1,则所有项目都已订购。

从查询开始,以确定Max(ORDERED)每个ORDER_ID.

SELECT y.ORDER_ID, Max(y.ORDERED) AS MaxOfORDERED
FROM YourTable AS y
GROUP BY y.ORDER_ID;

一旦你有这个工作,使用它作为另一个IIf表达式的子查询来转换为你想要MaxOfORDEREDSTATUS文本。

SELECT
    sub.ORDER_ID,
    IIf(sub.MaxOfORDERED = 0, 'not ordered', 'ordered') AS STATUS
FROM
    (
        SELECT y.ORDER_ID, Max(y.ORDERED) AS MaxOfORDERED
        FROM YourTable21030926a AS y
        GROUP BY y.ORDER_ID
    ) AS sub
ORDER BY sub.ORDER_ID;
于 2013-09-26T14:55:40.987 回答