SQL 预测一年中每个月有多少客户将达到 55 岁的代码

SQL code to project how many clients will reach age 55 each month for a year

我正在尝试获取我已经管理过的目前 >= 55 岁的客户数量,但接下来我想了解一个月后有多少人 >= 55 岁,然后2 个月的时间等最多 12 个月。

这是我目前的情况,但我不确定下一步该怎么做。非常感谢任何帮助!谢谢

SELECT 
    SUM(CASE 
        WHEN [C].[BirthDate] > dateadd(year, -54, getdate()) AND [E].[MfChk4] = '0' 
        THEN 0 
        ELSE 1 
    END) AS [Age Eligible]
FROM 
    [dbo].[CR_Entity] [E]
    LEFT OUTER JOIN [dbo].[CR_RefMaster] [RM] 
        ON  [RM].[EntCode] = [E].[EntClient] 
        AND [RM].[Status] = '0'
    LEFT OUTER JOIN [dbo].[Compliance] [C] 
        ON  [C].[AddrCode] = [RM].[RefCode]

下一位我想要的结果类似于...

您将不得不编写多个 case 语句,例如:

SUM
(CASE WHEN [C].[BirthDate] > dateadd(month,-54*12+1, getdate()) 
    AND [E].[MfChk4] = '0' 
             THEN 0 ELSE 1 END) AS Month1,
SUM
(CASE WHEN [C].[BirthDate] > dateadd(month,-54*12+2, getdate()) 
    AND [E].[MfChk4] = '0' 
             THEN 0 ELSE 1 END) AS Month2,
.
.
.
SUM
(CASE WHEN [C].[BirthDate] > dateadd(month,-54*12+12, getdate()) 
    AND [E].[MfChk4] = '0' 
             THEN 0 ELSE 1 END) AS Month12

要创建您正在寻找的命名约定,因为您必须使用动态 SQL。您可能需要稍微更改查询,但它的基础是:

--Declaring and calculating the Column Names

declare @test1 nvarchar(max),
        @test2 nvarchar(max),
        @test12 nvarchar(max)
set @test1='['+CAST(FORMAT(DATEADD(month,1,GETDATE()),'MMM-yy') as Varchar(20))+']'
set @test2='['+CAST(FORMAT(DATEADD(month,2,GETDATE()),'MMM-yy') as Varchar(20))+']'
.
.
.
set @test12='['+CAST(FORMAT(DATEADD(month,12,GETDATE()),'MMM-yy') as Varchar(20))+']'

--Writing the Dynamic Sql text

DECLARE @sql nvarchar(max)
SELECT @sql = N'SELECT SUM (CASE WHEN [C].[BirthDate] > dateadd(year, -54, getdate()) 
    AND [E].[MfChk4] = ''0'' 
             THEN 0 ELSE 1 END) AS [Age Eligible],
SUM
(CASE WHEN [C].[BirthDate] > dateadd(month,-54*12+1, getdate()) 
    AND [E].[MfChk4] = ''0''
             THEN 0 ELSE 1 END) AS' + @test1 + ',
SUM
(CASE WHEN [C].[BirthDate] > dateadd(month,-54*12+2, getdate()) 
    AND [E].[MfChk4] = ''0'' 
             THEN 0 ELSE 1 END) AS' + @test2 + ',
.
.
.
SUM
(CASE WHEN [C].[BirthDate] > dateadd(month,-54*12+12, getdate()) 
    AND [E].[MfChk4] = ''0'' 
             THEN 0 ELSE 1 END) AS' + @test12 + '
FROM [dbo].[CR_Entity] [E]
    LEFT OUTER JOIN [dbo].[CR_RefMaster] [RM] ON [RM].[EntCode] = [E].[EntClient] AND [RM].[Status] = ''0''
    LEFT OUTER JOIN [dbo].[Compliance] [C] ON [C].[AddrCode] = [RM].[RefCode]'

--Executing the Dynamic Sql query

EXEC sp_executesql @sql

您可能希望从一个案例语句开始,了解它的工作原理,然后对整个数据实施它。