Aqui está o meu problema, Source DB é Azure MSSQL - eu tenho uma tabela que lista todas as assinaturas vendidas. As colunas relevantes são:
Número da conta, grupo de assinatura, data de compra, data de cancelamento
Data de cancelamento contém valores NULL (para assinaturas que ainda não foram canceladas). Uma conta pode ter várias assinaturas, em vários grupos de assinaturas.
Os dados de exemplo são:
Número da conta | Grupo de assinatura | Data de compra | Data de cancelamento |
1 | A | 04/02/2013 | 04/02/2014 |
1 | A | 04/02/2013 | NULO |
1 | B | 04/02/2013 | NULO |
2 | C | 07/05/2018 | 08/05/2020 |
3 | C | 20/3/2020 | NULO |
3 | C | 08/04/2020 | NULO |
etc.
Estou procurando contar o número de grupos de assinatura para cada cliente e para cada mês - para que a saída seja algo assim:
Cliente | Contagem de A | Contagem de B | Contagem de C | Mês/Ano |
1 | 1 | 1 | 0 | 10/2020 |
3 | 0 | 0 | 2 | 10/2020 |
1 | 1 | 1 | 0 | 09/2020 |
3 | 0 | 0 | 2 | 09/2020 |
1 | 1 | 1 | 0 | 08/2020 |
2 | 0 | 0 | 1 | 08/2020 |
3 | 0 | 0 | 2 | 08/2020 |
Eu posso escrever a consulta para um determinado mês:
selecione t.[número da conta],
COUNT(CASE WHEN t.[Grupo de assinatura] = A então 1 ELSE NULL END) como "Contagem de A",
COUNT(CASE WHEN t.[Grupo de assinatura] = B então 1 ELSE NULL END) ) como "Contagem de B",
COUNT(CASE WHEN t.[Grupo de assinatura] = C então 1 ELSE NULL END) como "Contagem de C",
'09/2020' como 'Mês/Ano'
da tabela t
onde (t .[Data da compra] <= '30/09/2020' e (t.[Data de cancelamento] é nula ou t.[Data de cancelamento] > '10/01/2020'))
Agrupar por t.[Número da conta], [Mês ano]
No entanto, espero que alguém possa me ajudar a modificar o acima para que ele seja executado por todos os meses (com base no MIN da data de compra e no MAX na data do cancelamento)
Acabei fazendo isso usando um Stored Procedure, criando uma Temp Table:
Em seguida, fazendo um Loop através dessa Tabela e preenchendo uma tabela de saída: