SQL код для прогнозирования количества клиентов, достигших 55 лет каждый месяц в течение года - PullRequest
0 голосов
/ 09 января 2020

Я пытаюсь получить количество клиентов, которым в настоящее время> = 55 лет, которым я управлял, но затем я хочу узнать, сколько людей будет> = 55 через месяц, а затем через 2 месяца время и c до 12 месяцев.

Вот то, что я имею до сих пор, но я не уверен, как go о следующем бите. Любая помощь с благодарностью! Спасибо.

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]

Результат, который я хочу получить для следующего бита, будет примерно таким ...

Example results

Ответы [ 2 ]

1 голос
/ 09 января 2020

Вы должны написать несколько операторов, например:

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
0 голосов
/ 10 января 2020

Чтобы создать соглашение об именовании, которое вы ищете, вам придется использовать Dynami c 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

Возможно, вы захотите начать с одного оператора case, чтобы понять, как он работает, а затем реализовать его для всех данных.

...