(Access& VB.NET)查询:获取MAX()

时间:2015-03-13 13:02:55

标签: vb.net ms-access max

我需要显示为每位客户保存的最后一个订单号

示例:

表:客户

ID_CUST | CUSTOMER
100 | JOHN
101 | MARY

表:订单

ID_ORDER  | NOTES | TOTAL | ID_CUST
1 | LOREM IPSUM | 100€ | 100
2 | PENDING  | 300€ | 100
3 | BLA BLA | 400€ | 101

如果我执行此查询:

Select CUSTOMERS.ID_CUST, CUSTOMERS.CUSTOMER, MAX(ORDERS.ID_ORDER)
FROM CUSTOMERS INNER JOIN ORDERS ON CUSTOMERS.ID_CUST=ORDERS.ID_CUST
GROUP BY CUSTOMERS.ID_CUST, CUSTOMERS.CUSTOMER

工作正常。结果:

100 | JOHN | 2
101 | MARY | 3

问题是我需要显示"注意"和"总计"字段也是。如果我运行这个:

Select CUSTOMERS.ID_CUST, CUSTOMERS.CUSTOMER, MAX(ORDERS.ID_ORDER), ORDERS.TOTAL, ORDERS.NOTES
FROM CUSTOMERS INNER JOIN ORDERS ON CUSTOMERS.ID_CUST=ORDERS.ID_CUST
GROUP BY CUSTOMERS.ID_CUST, CUSTOMERS.CUSTOMER,ORDERS.TOTAL, ORDERS.NOTES

结果不是我需要的[错误]:

100 | JOHN | 1 | LOREM IPSUM | 100€
100 | JOHN | 2 | PENDING | 300€ | 100
101 | MARY | 3 | BLA BLA | 400€

因为如果我不包括这两个字段," notes" " total",在" Group By"中,查询返回错误:不包括指定的表达式作为聚合函数的一部分

更新1:

我正在从vb.net程序运行此查询

1 个答案:

答案 0 :(得分:0)

保存您的第一个查询(qryCustLastOrderID)。然后创建一个新查询(这是空中代码)SELECT qryCustLastOrderID。*,ORDERS.Notes FROM qryCustLastOrderID INNER JOIN ORDERS on qryCustLastOrderID.MaxOfID_Order = ORDERS.ID_Order。

如果您不想保存单独的查询,可以选择以下方式(再次使用空气代码): SELECT Q1。*,ORDERS.Notes FROM (选择CUSTOMERS.ID_CUST,CUSTOMERS.CUSTOMER,MAX(ORDERS.ID_ORDER)作为MaxOfID_Order 来自CUSTOMERS.ID_CUST = ORDERS.ID_CUST的客户INNER JOIN ORDERS GROUP BY CUSTOMERS.ID_CUST,CUSTOMERS.CUSTOMER)Q1内部联接订单在Q1.MaxOfID_Order = ORDERS.ID_Order