none
Relação de tabelas RRS feed

  • Pergunta

  • pessoal, tenho um banco que todo mes recebo uma tabela de atualizacao com dados de clientes queria saber como posso fazer para identificar a variação de clientes exemplo, mes dezembro tive 300 clientes, janeiro tive 285, fevereiro tive 339.

    queria identificar estes CPFs que de dezembro para janeiro sairam, que em janeiro entraram e nao tinham em dezembro...

    acho que essa é a ideia.

    sexta-feira, 12 de abril de 2019 14:05

Respostas

Todas as Respostas

  • Djacy,

    Você poderia utilizer os operadores Exists, Not Exists, In ou Not In para realizar esta comparação.

    Ou até mesmo fazer uma junção através dos operadores Inner para trazer o que for igual e Left ou Rigth para identificar as diferenças.

    Poderia nos apresentar a estrutura das tabelas.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 12 de abril de 2019 17:48
  • Deleted
    sexta-feira, 12 de abril de 2019 18:37
  • Djacy, é possível obter relação dos novos CPF desde que na tabela exista coluna que indique em qual mês a linha foi inserida. Mas não é possível saber quais linhas foram excluídas, pois elas não existem mais na tabela; a não ser que o sistema faça a chamada exclusão lógica e que registre na tabela a data em que houve a exclusão lógica.

    É bem provável que tenha que implementar uma tabela de histórico de movimentação, sendo que nessa tabela ficariam registradas as entradas e saídas. Por exemplo:

    -- código #1
    USE banco;
    go
    
    CREATE TABLE Historico_CPF (
       Acao char(1) not null check (Acao in ('E', 'S')),
       CPF char(11) not null,
       Data_mov datetimeoffset(0) not null default sysdatetimeoffset()
    );
    go

    Sempre que fosse incluída nova inha na tabela principal, uma linha seria incluída na tabela Historico_CPF contendo "E" na coluna Acao, o número do CPF na coluna CPF e a data e horário da movimentação na coluna Data_mov. O preenchimento dessa coluna poderia ser feito diretamente pela aplicação ou então através de procedimento de gatilho (trigger).

    Para obter os dados de movimentação de cada mês bastaria uma consulta bem simples. Por exemplo, para listar "CPFs que de dezembro para janeiro sairam" basta algo como:

    -- código #2
    -- informe o mês e ano para obter a movimentação
    declare @Mês tinyint, @Ano smallint;
    set @Mês= 1;
    set @Ano= 2019;
    
    -- variáveis para uso interno
    declare @DataInicial datetime, @DataFinal datetime;
    set @DataInicial= convert (date, '1/' + cast (@Mês as varchar(2)) + '/' + cast (@Ano as char(4)), 103);
    set @DataFinal= dateadd (month, +1, @DataInicial);
    
    -- obtém a movimentação no mês
    SELECT sum (case when Acao = 'E' then 1 else 0 end) as Qtd_Entradas,
           sum (case when Acao = 'S' then 1 else 0 end) as Qtd_Saidas
      from dbo.Historico_CPF
      where Data_mov >= @DataInicial
            and Data_mov < @DataFinal;

    Não testei; pode conter erro(s);


    José Diz     Belo Horizonte, MG - Brasil     [T-SQL performance tuning: Porto SQL]   [e-mail]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    José,

    Me parece que não é esse o tipo de implementação que ela faz, mas sua sugestão é bem interessante.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 12 de abril de 2019 18:42
  • é uma tabela com 6 colunas, mais existe uma constante movimentacao, um mes eu recebo 300 registros, no outro 180, depois 400 e por ai vai. ai queria identificar os CPFs que saem e entram.
    sexta-feira, 12 de abril de 2019 19:28
  • Djacy,

    Então, mas você tem algum tipo de campo que possa identificar a entrada ou saída do CPF?

    Talvez uma tabela de histórico de movimentação dos CPF?


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    segunda-feira, 15 de abril de 2019 11:34
  • Deleted
    segunda-feira, 15 de abril de 2019 13:41
  • boa tarde!

    falei que era uma tabela com 6 colunas porque é o que eu tenho. eu recebo um arquivo com estes dados mensalmente e faco a importação para o banco. mais como eu falei no inicio, nao recebo os mesmos clientes todos os meses e preciso saber de um mês para outro saber quais clientes saíram e entraram nos meses. 

    tentei usar as funções INTERSECT e EXCEPT para identificar os casos mais não sei se ele é preciso para esta finalidade.

    terça-feira, 16 de abril de 2019 17:53
  • Deleted
    terça-feira, 16 de abril de 2019 18:24
  • é gerado uma tabela para cada mes, e a cada 6 meses eu apago a mais antiga.

    nesta tabela tenho as colunas ORGAO, MATRICULA, CPF, R_J e S_F. por padrao todos os mes recebo e importo uma nova tabela.

    no design esta na mesma ordem int, int, float, nvarchar(50) e nvarchar(50).

    terça-feira, 16 de abril de 2019 19:17
  • Deleted
    • Marcado como Resposta Djacy quarta-feira, 17 de abril de 2019 19:10
    terça-feira, 16 de abril de 2019 19:35