在我的数据库中,我有多个“是/否”行的表,如果选择它们,我想运行一些选择检查。
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)。哪种解决方案最优雅?如果你有一些类似问题的例子,我将非常感激。提前谢谢。
答案 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;