我使用visual basic 2013开发winform应用程序并连接SQL数据库(服务器2014) 下表包含在数据库中 (日期格式为月 - 年)
我的问题是:
需要为成员生成SQL查询返回月份
因此,对于memID 1,结果必须为空
对于memID 2,结果必须是:
4-2016
5-2016
11-2016
4-2017
9-2017
OR
如果我需要重新设计我的表(列)以简化此查询,那么关于表和查询的建议是什么
答案 0 :(得分:0)
对于每个成员,您可以生成从第一个日期开始的所有月份,然后确定已存在的月份。假设您将列的格式更改为该月的第一天:
with months as (
select memid, firstpaymentdate as dte
from members
union all
select memid, dateadd(month, 1, dte)
from members
where dateadd(month, 1, dte) < getdate()
)
select memid, dte
from months
where not exists (select 1
from paymentdetails
where fromdate >= dte and todate <= dte
);
注意:每个成员的工作时间最长可达100个月。之后,您需要设置最大递归选项。