简体   繁体   中英

MS Access Help to run a query

I have two tables as follows. 在此处输入图片说明

I want to get all members who are active and payment period = fortnightly and corresponding savings record for each member for a specific year and month. Note that some of the members may not have a savings record for given year and month. I have a query written, but it does not return the members who does not have a savings record in savings table.

SELECT Member.memberID As [ID],Member.firstName AS [First Name],
       Member.lastName AS [Last Name], Member.paymentPeriod AS [Payment Period],
       Savings.savingId AS [Savings Id], Savings.enteredAmount AS [Amount]
FROM Member
    LEFT JOIN Savings ON Member.memberID = Savings.memberId
WHERE Member.isActive = 'Active' AND Member.paymentPeriod = 'Fortnightly'
      AND Year(Savings.enteredDate)=2019 AND Month(Savings.enteredDate) = 1;

Move the SAVINGS conditions from WHERE to ON to get true LEFT JOIN result:

SELECT Member.memberID As [ID],Member.firstName AS [First Name],
       Member.lastName AS [Last Name], Member.paymentPeriod AS [Payment Period],
       Savings.savingId AS [Savings Id], Savings.enteredAmount AS [Amount]
FROM Member
    LEFT JOIN Savings ON Member.memberID = Savings.memberId
      AND Year(Savings.enteredDate)=2019 AND Month(Savings.enteredDate) = 1
WHERE Member.isActive = 'Active' AND Member.paymentPeriod = 'Fortnightly';

(With those conditions in the WHERE clause, you'll get regular INNER JOIN result.)

Edit: Attempt to avoid " Join expression not supported error ":

SELECT Member.memberID As [ID],Member.firstName AS [First Name],
       Member.lastName AS [Last Name], Member.paymentPeriod AS [Payment Period],
       Savings.savingId AS [Savings Id], Savings.enteredAmount AS [Amount]
FROM Member
    LEFT JOIN Savings ON Member.memberID = Savings.memberId
WHERE Member.isActive = 'Active' AND Member.paymentPeriod = 'Fortnightly'
      AND (Year(Savings.enteredDate)=2019 or Year(Savings.enteredDate) IS NULL)
      AND (Month(Savings.enteredDate) = 1 or Month(Savings.enteredDate) IS NULL);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM