Microsoft Access - 生成特定查询
Posted
技术标签:
【中文标题】Microsoft Access - 生成特定查询【英文标题】:Microsoft Access - Generating a Specific Query 【发布时间】:2012-09-30 19:56:39 【问题描述】:这是我面临的一个有趣的挑战。如果你可以为这个问题创建一个查询,我称你为天才——这让我困扰了很长一段时间。
这里有两张表:
客户表
客户 ID、名称
交易表
transactionId、customerId、amountPaid、purchaseDate
我想为当月没有任何交易但前几个月欠款的人选择所有 customerId。
例如,如果我选择的月份是 10 月,我想选择 10 月份没有交易但 10 月之前的交易总和大于零的所有 customerId。基本上,我的目标是生成一份报告,显示当月没有欠款但前几个月欠款的客户的收据。感谢您考虑这个问题。
【问题讨论】:
这个问题的上一版本怎么了:***.com/questions/12662620/…? 【参考方案1】:您可能需要重新考虑您的数据库模型。恕我直言,我认为您需要更多表格来处理多个月。假设以月份(1 月至 12 月)作为列和用户 ID 列的表。从那我认为你应该能够执行你所描述的算法。
【讨论】:
【参考方案2】:您可以获取每个客户在所选月份之前的购买日期(包括所选月份),并检查该日期是否在所选月份之前。
自从我使用 Access 已经有一段时间了,但是是这样的:
select c.customerId, c.name, max(t.purchaseDate) as lastPurchaseDate
from Customers as c
inner join Transactions as t on t.customerId = c.CustomerId and t.PurchaseDate < #2012-11-01#
group by c.customerId, c.name
having lastPurchaseDate < #2012-10-01#
【讨论】:
我想我需要以某种方式结合这两个查询: @user1709986:哪两个查询?【参考方案3】:我终于在 user1238850 和 Guffa 的帮助下解决了。这有点混乱,但它似乎到目前为止工作。
SELECT Customers.customerId
FROM (
SELECT Customers.customerId
FROM Customers
WHERE (((Customers.customerId) Not In (
SELECT Transactions.customerId
FROM Transactions
WHERE Customers.customerId = Transactions.customerId AND
Transactions.purchaseDate >=#8/1/2012# AND
Transactions.purchaseDate <#9/1/2012# OR
Transactions.customerId Is Null)))
)
AS Q1
INNER JOIN (
SELECT Transactions.customerId, Sum(Transactions.amountPaid) AS SumOfamountPaid
FROM Transactions
WHERE Transactions.purchaseDate <#8/1/2012#
GROUP BY Transactions.customerId
) AS Q2
ON Q1.customerId = Q2.customerId;
【讨论】:
以上是关于Microsoft Access - 生成特定查询的主要内容,如果未能解决你的问题,请参考以下文章
Microsoft Access 2007 - 查询多个表会产生错误
是否有一个查询会返回 Microsoft Access 表中的所有列名?
Microsoft Access Make-Table 性能与传递查询