我正在尝试在MS Access中创建一个子查询,其中having子句比较当前记录的值。我分开创建了查询,但我很难尝试将它们组合起来。
我有以下查询,即采购订单清单(POsFullDetail),并且应该显示给定库存号(Stockum)的采购订单日期的第一次出现:
SELECT POsFullDetail.PO, POsFullDetail.OrderDate, POsFullDetail.StockNum,
(SELECT First(POsFullDetail.OrderDate) AS FirstOfOrderDate
FROM POsFullDetail
GROUP BY POsFullDetail.StockNum
HAVING POsFullDetail.StockNum = POsFullDetail.StockNum.Value
ORDER BY First(POsFullDetail.OrderDate)
) AS First_Date
FROM POsFullDetail;
我正在尝试使用的声明是POsFullDetail.StockNum.Value 它的设置方式是,它要求一个价值。当我创建子查询时,我直接输入了库存号。
答案 0 :(得分:1)
子查询为您提供每个stocknum的第一个订单日期。
将其用作子查询时,您不再对第一个订单日期 per stocknum感兴趣,而是在 stocknum的第一个订单日期。
SELECT POsFullDetail.PO, POsFullDetail.OrderDate, POsFullDetail.StockNum,
(
SELECT First(SameStockNum.OrderDate) AS FirstOfOrderDate
FROM POsFullDetail AS SameStockNum
WHERE SameStockNum.StockNum = POsFullDetail.StockNum
) AS First_Date
FROM POsFullDetail;
如您所见,您必须使用表别名,以便将表链接到自身。虽然使用同一个表,但您可以将其称为POsFullDetail,并使用一次SameStockNum,以便您通过SameStockNum.StockNum = POsFullDetail.StockNum
进行链接。