计算数据库中的已检查项目

时间:2013-09-25 22:13:24

标签: vb.net winforms ms-access

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

 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)。哪种解决方案最优雅?如果你有一些类似问题的例子,我将非常感激。提前谢谢。

1 个答案:

答案 0 :(得分:2)

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

True存储为-1,False存储为0.因此,如果任何ORDERED的最大ORDER_ID值为0,您知道该订单至少有一个项目没有尚未订购。如果最大值为-1,则所有项目都已订购。

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

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

完成后,将其用作另一个带有IIf表达式的子查询,将MaxOfORDERED转换为所需的STATUS文本。

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;