我有两张表OrderHeader
和OrderDetail
表。我需要做的是检查StatusFK
表中的Detail
以查找与OrderHeader
表相关的每条记录。
因此,如果StatusFK = 2
表中Detail
中的所有相关记录,我希望在查询中显示该记录,因为我将在OrderHeader
记录上运行更新以更改其{ {1}}收到。
但是说详细信息表中有6条与Status
表相关的记录,但是只有6条记录中有5条记录OrderHeader
,那么我不希望它显示为未准备就绪被归类为完全收到?
我希望有人能够理解我所说的话,希望能帮助我实现这个目标!
答案 0 :(得分:3)
如果我理解正确你只需要OrderHeaders,其中订单明细记录的数量等于statusFK为2的OrderDetails的数量。
您可以使用SUM / IIF并将其与HAVING子句中的详细记录计数进行比较
SELECT OrderHeader.OrderID, OrderHeader.Name
FROM OrderHeader
INNER JOIN OrderDetail
ON OrderHeader.OrderId = OrderDetail.OrderId
GROUP BY OrderHeader.OrderID, OrderHeader.Name
HAVING
Count(OrderDetail.OrderId ) = SUM(IiF (OrderDetail.StatusFK = 2 ,1,0) )
答案 1 :(得分:0)
在SQL中,诀窍是在LEFT JOIN中查询未收到状态的订单详细信息,并测试是否存在不需要状态的行。
不知道您的MS Access版本,我无法保证确切的语法,但类似以下的查询应该可以解决问题。
SELECT OrderHeader.*, OrderDetail.* FROM OrderDetail
JOIN OrderHeader ON HeaderFK = HeaderID
LEFT JOIN OrderDetail AS OrderDetailNotReceived ON OrderDetailNotReceived.HeaderFK = HeaderID AND OrderDetailNotReceived.StatusFK < 2
WHERE OrderDetailNotReceived.DetailID IS NULL;
答案 2 :(得分:0)
感谢您的帮助,这是我完成的查询,看起来它正在诀窍,我只需将其合并到我的更新查询中
SELECT tblOrder.OrderPK
FROM tblOrder
INNER JOIN tblOrderDetail
ON tblOrder.OrderPK = tblOrderDetail.OrderFK
GROUP BY tblOrder.OrderPK
HAVING
Count(tblOrderDetail.OrderFK ) = SUM(IiF (tblOrderDetail.StatusFK = 2 ,1,0) )
答案 3 :(得分:0)
我刚刚意识到我的上述查询是只读的,因为它包含Totals,我需要能够将它链接到一个可更新的查询吗?
有一种简单的方法来解决这个问题吗?
谢谢