问题描述
在 MS Access 365 中,我有 2 个表,我想在第二个表的字符串的一部分中计算第一个表中年份的出现次数,完全使用 sql(到目前为止我使用的是 VBA,但我想简化).
第一个表 (tdistinctYears) 包含我们的一个成员支付的所有年份:
ID | 付款年份 |
---|---|
1 | 2015 |
2 | 2016 |
3 | 2017 |
3 | 2018 |
4 | 2019 |
5 | 2020 |
6 | 2021 |
7 | 2022 |
第二个表 (tPayments) 包含会员的所有付款,其中一列包含会员编号,另一列包含付款年份。有时会员支付一年,有时支付几年。因此,该表格如下所示:
会员编号 | 年付款 |
---|---|
11 | 2016 |
11 | 2017 |
11 | 2018 |
26 | 2017 |
26 | 2018;2019 |
26 | 2020;2021;2022 |
38 | 2016 |
38 | 2017 |
38 | 2018;2019;2020;2021 |
付款年份 | 计数 |
---|---|
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;
但我得到的是:
付款年份 | 计数 |
---|---|
2015 | 0 |
2016 | 2 |
2017 | 3 |
2018 | 1 |
2019 | 0 |
2020 | 0 |
2021 | 0 |
上面的查询似乎没有在 JOIN ON 部分使用“like”表达式。
有人可以帮我吗?
解决方法
我认为你很接近,只是在条件 tPayments.YearPayment
应该是第一个并且 tDistinctYears.PaymentYear
应该像操作符一样在里面的地方改变列。
SELECT tDistinctYears.PaymentYear,(COUNT(tPayments.YearPayment)) AS [Count]
FROM tDistinctYears
LEFT JOIN tPayments ON tPayments.YearPayment like "*" &
tDistinctYears.PaymentYear
& "*" WHERE (tDistinctYears.PaymentYear > 0 AND tDistinctYears.PaymentYear <=
YEAR(NOW()))
GROUP BY tDistinctYears.PaymentYear;