生成StartDate和EndDate之间的月份(SQL Server 2016)
我有一个客户表,我需要生成活动日期和非活动日期之间的月份 以下是原始数据: 以下是我希望得到的结果:生成StartDate和EndDate之间的月份(SQL Server 2016),sql,sql-server,sql-server-2016,Sql,Sql Server,Sql Server 2016,我有一个客户表,我需要生成活动日期和非活动日期之间的月份 以下是原始数据: 以下是我希望得到的结果: 谢谢您可以使用递归CTE: with yyyymm as ( select customerid, datefromparts(year(activedate), month(activedate), 1) as dte, datefromparts(year(inactivedate), month(inactivedat
谢谢您可以使用递归CTE:
with yyyymm as (
select customerid,
datefromparts(year(activedate), month(activedate), 1) as dte,
datefromparts(year(inactivedate), month(inactivedate), 1) as inactivemonth
from Customer
union all
select customerid,
dateadd(month, 1, dte),
inactivemonth
from yyyymm
where dte < inactivemonth
)
select CustomerId, year(dte) * 100 + month(dte)
from yyyymm
order by dte
这会将结果生成为当月的第一个日期。如果您希望年/月值为字符串或数字,可以适当设置格式。我对Gordon的脚本做了一些更改。很抱歉,我也是新成员,我无法添加评论。我相信这就是你想要的
WITH Cus AS
(
select CustomerId
,DATEFROMPARTS(YEAR(ActiveDate),MONTH(ActiveDate), 1) as ActiveDate
,DATEFROMPARTS(YEAR(InactiveDate),MONTH(InactiveDate), 1) as InactiveDate
FROM Customer
)
SELECT *
FROM Cus C
INNER JOIN CustomerMonths CM ON C.CustomerId = CM.CustomerId
WHERE DATEFROMPARTS(LEFT(CM.MONTHS,4),RIGHT(CM.MONTHS,2),1) BETWEEN C.ActiveDate AND C.InactiveDate
这里的大多数人都希望样本数据和预期结果是格式化文本,而不是图像或图像链接。有一个包含所有可能月份的日历表。或者cte。外部连接。对不起,我不清楚。我没有顾客月台。这就是我所希望的结果。我需要生成活动日期和非活动日期之间的月份。因此,您可以检查Gordon的答案。