【发布时间】:2021-09-20 19:24:25
【问题描述】:
在 MS Access 365 中,我有 2 个表,我想在第二个表的字符串的一部分中计算第一个表中一年的出现次数,纯粹使用 SQL(到目前为止,我使用 VBA,但我想简化)。
第一个表 (tDistinctYears) 包含我们的一个成员支付的所有年份:
| ID | PaymentYear |
|---|---|
| 1 | 2015 |
| 2 | 2016 |
| 3 | 2017 |
| 3 | 2018 |
| 4 | 2019 |
| 5 | 2020 |
| 6 | 2021 |
| 7 | 2022 |
第二个表 (tPayments) 包含来自会员的所有付款,其中一列包含会员编号,另一列包含付款年份。有时会员支付一年,有时支付几年。因此,该表如下所示:
| MembershipNr | YearPayment |
|---|---|
| 11 | 2016 |
| 11 | 2017 |
| 11 | 2018 |
| 26 | 2017 |
| 26 | 2018;2019 |
| 26 | 2020;2021;2022 |
| 38 | 2016 |
| 38 | 2017 |
| 38 | 2018;2019;2020;2021 |
我想要一个查询,告诉我有多少会员在哪一年支付了费用:
| PaymentYear | Count |
|---|---|
| 2015 | 0 |
| 2016 | 2 |
| 2017 | 3 |
| 2018 | 3 |
| 2019 | 2 |
| 2020 | 2 |
| 2021 | 2 |
我使用了以下 SQL 查询,我在 stackoverflow 上找到了各种答案:
SELECT tDistinctYears.PaymentYear, (COUNT(tPayments.YearPayment)) AS [Count]
FROM tDistinctYears
LEFT JOIN tPayments ON tDistinctYears.PaymentYear like "*" & tPayments.YearPayment & "*"
WHERE (tDistinctYears.PaymentYear > 0 AND tDistinctYears.PaymentYear <= YEAR(NOW()))
GROUP BY tDistinctYears.PaymentYear;
但我得到的是:
| PaymentYear | Count |
|---|---|
| 2015 | 0 |
| 2016 | 2 |
| 2017 | 3 |
| 2018 | 1 |
| 2019 | 0 |
| 2020 | 0 |
| 2021 | 0 |
上面的查询似乎没有使用 JOIN ON 部分中的“like”表达式。
有人可以帮帮我吗?
【问题讨论】: