微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MS Access SQL – 如何计算一个表中某个数字在另一个表的字符串中出现的次数

如何解决MS Access SQL – 如何计算一个表中某个数字在另一个表的字符串中出现的次数

在 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;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。