返回日期不包括在数据库表中

时间:2017-09-23 12:41:40

标签: sql sql-server

我使用visual basic 2013开发winform应用程序并连接SQL数据库(服务器2014) 下表包含在数据库中 (日期格式为月 - 年)

enter image description here

我的问题是:

需要为成员生成SQL查询返回月份

因此,对于memID 1,结果必须为空

对于memID 2,结果必须是:

4-2016
5-2016
11-2016
4-2017
9-2017

OR

如果我需要重新设计我的表(列)以简化此查询,那么关于表和查询的建议是什么

1 个答案:

答案 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个月。之后,您需要设置最大递归选项。