none
Consulta desconsiderando dados duplicados! RRS feed

  • Pergunta

  • Estou com um problema em fazer uma consulta sem trazer dados duplicados eu consigo fazer sem trazer o idTabela quando passo o idTabela ele duplica, alguem poderia me ajudar?

    select A.idAgenda,T.idTabela,T.nmProfissional,T.nmProcedimento, A.dtData
    from vwMedAgenda A left outer join 
    vwTabela T ON A.idProfissional = T.idProfissional
    where CONVERT(date,A.dtData,103) = CONVERT(date,'21/01/2015',103)  
    and T.idProfissional = 31 and T.idProcedimento = 176 and T.idConvenio = 1
    and A.cdStatus = 'DISPONÍVEL'
    group by A.idAgenda,T.idTabela, T.nmProfissional,T.nmProcedimento,A.dtData
    order by A.idAgenda 
    

    quarta-feira, 14 de janeiro de 2015 12:14

Respostas

  • Raniel,

    Normalmente quanto este tipo de duplicação acontece é recorrente de uma junção de dados teoricamente mal elaborada.

    Talvez uma alternativa seja você tentar quebrar este código em duas partes fazendo uso de CTE.

    Já pensou nisso?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com

    quarta-feira, 14 de janeiro de 2015 13:00
  • O código sem o ID, você pode enviar para o DataSource de um GridView, por exemplo; já o código com o ID, você pode enviar para um LIST e armazenar esse LIST em SESSION, conforme exemplo abaixo.

    // ARMAZENAMENTO DA LISTA.
    Session["Usuario"] = usuario;
    
    // RECUPERAÇÃO DA LISTA.
    List<UsuarioModel> usuario = (List<UsuarioModel>)Session["Usuario"];

    Abs.


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    quarta-feira, 14 de janeiro de 2015 12:29
  • Bom dia,

    Raniel, você vai precisar do idTabela de qual linha?

    Talvez uma alternativa seja utilizar uma função de agregação nessa coluna. Ex:

    select 
        A.idAgenda,
        MIN(T.idTabela) as idTabela,
        T.nmProfissional,
        T.nmProcedimento, 
        A.dtData
    from -- ...
    group by 
        A.idAgenda,
        T.nmProfissional,
        T.nmProcedimento, 
        A.dtData
    

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    quarta-feira, 14 de janeiro de 2015 12:37
  • Deleted
    quarta-feira, 14 de janeiro de 2015 14:30

Todas as Respostas

  • Bom dia Raniel,

    Sem o ID da tabela você consegue trazer os dados não duplicados porque no comando DISTINCT ele verifica a linha inteira, então sem o ID a linha inteira é igual. Porém quando você consulta o ID também, esse campo impede que a linha inteira seja igual.

    Nesse caso, se você não quiser dados duplicados, terá que fazer a consulta sem o ID da tabela mesmo.

    Abs.


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    quarta-feira, 14 de janeiro de 2015 12:17
  • Mais preciso do IdTabela
    quarta-feira, 14 de janeiro de 2015 12:19
  • Então não tem jeito mesmo, pelo o que eu conheço.

    Você poderia fazer 2 consultas, uma sem o ID (para exibição na tela) e outra com o ID (armazenada em sessão), para você poder utilizar o ID na execução do código.


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    quarta-feira, 14 de janeiro de 2015 12:22
  • Então não tem jeito mesmo, pelo o que eu conheço.

    Você poderia fazer 2 consultas, uma sem o ID (para exibição na tela) e outra com o ID (armazenada em sessão), para você poder utilizar o ID na execução do código.


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    Tem algum exemplo dessa implementação?

    quarta-feira, 14 de janeiro de 2015 12:23
  • O código sem o ID, você pode enviar para o DataSource de um GridView, por exemplo; já o código com o ID, você pode enviar para um LIST e armazenar esse LIST em SESSION, conforme exemplo abaixo.

    // ARMAZENAMENTO DA LISTA.
    Session["Usuario"] = usuario;
    
    // RECUPERAÇÃO DA LISTA.
    List<UsuarioModel> usuario = (List<UsuarioModel>)Session["Usuario"];

    Abs.


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    quarta-feira, 14 de janeiro de 2015 12:29
  • Bom dia,

    Raniel, você vai precisar do idTabela de qual linha?

    Talvez uma alternativa seja utilizar uma função de agregação nessa coluna. Ex:

    select 
        A.idAgenda,
        MIN(T.idTabela) as idTabela,
        T.nmProfissional,
        T.nmProcedimento, 
        A.dtData
    from -- ...
    group by 
        A.idAgenda,
        T.nmProfissional,
        T.nmProcedimento, 
        A.dtData
    

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    quarta-feira, 14 de janeiro de 2015 12:37
  • Raniel,

    Normalmente quanto este tipo de duplicação acontece é recorrente de uma junção de dados teoricamente mal elaborada.

    Talvez uma alternativa seja você tentar quebrar este código em duas partes fazendo uso de CTE.

    Já pensou nisso?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universit&#225;rio | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com

    quarta-feira, 14 de janeiro de 2015 13:00
  • Boa tarde Raniel,

    Como está essa sua dúvida?

    As respostas dos nossos amigos e colaboradores do fórum estão corretas, veja se serve para o seu caso, não esqueça de voltar e marcar a que te ajudar mais para manter o fórum sempre organizado.

    Vou propor todas como resposta para você receber um aviso e se precisar continuarmos te ajudando ok?

    Abraço


    Ricardo Cortes Microsoft Contingent Staff

    Esse contedo e fornecido sem garantias de qualquer tipo, seja expressa ou implicita.

    MSDN Community Support

    quinta-feira, 15 de janeiro de 2015 18:07