ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Sql Duplicando registros

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
Jeffytaboni
Aprendiz
Aprendiz


Registrado: Terça-Feira, 24 de Julho de 2012
Mensagens: 107

MensagemEnviada: Ter Ago 07, 2012 6:00 pm    Assunto: Sql Duplicando registros Responder com Citação

Pessoal estou com um Probleminha tenho no meu cadastro de cliente um cadsatro de contato, realizando um Select nestas tabelas, se no cadastro de cliente tiver 3 contatos ele me retorna os 3 eu quero que so me retorne o primeiro mais não estou conseguindo alguem j apassou por isso
abaixo ta o select que estou fazendo..
Muito oBrigado pela ajuda

SELECT CC.CdCampanha, CC.CdContato,
P.DsPessoa AS DsPessoaContato, P.DsTelefone AS DsTelefoneContato,
P.DsEmail AS DsEmailContato, P.DtAniversario AS DtAniversarioContato,
C.DsRazao AS DsEmpresa, T.CdOperadora, T.DsDDD, C.DsTelefone,
A.DsAtividade, T.DsCidade, T.CdUf, F.DsFonte, I.DsInteresse, R.DsRepresentante, CC.InStatus,
M.CdFonte, M.CdRepresentante2, M.CdInteresse, M.CdRepresentante, C.DsEMail, CC.InAtivo
FROM ContCamp CC
INNER JOIN Clientes C (NOLOCK) ON C.CdCliente = CC.CdContato
LEFT JOIN TBCIDADE T (NOLOCK) ON C.CdCidade = T.CdCidade
LEFT JOIN ClieMark M (NOLOCK) ON M.CdCliente = C.CdCliente
LEFT JOIN TBATIVID A (NOLOCK) ON M.CdAtividade = A.CdAtividade
LEFT JOIN TBFONTE F (NOLOCK) ON M.CdFonte = F.CdFonte
LEFT JOIN TBINTERE I (NOLOCK) ON M.CdInteresse = I.CdInteresse
LEFT JOIN Represen R (NOLOCK) ON M.CdRepresentante = R.CdRepresentante
LEFT JOIN ContCampPessoa CP (NOLOCK) ON CP.CdCampanha = CC.CdCampanha AND CP.CdCliente = CC.CdContato
LEFT JOIN PESSOASCONTATO P (NOLOCK) ON P.CdCliente = C.CdCliente AND (P.CdPessoa = CP.CdPessoa OR CP.CdPessoa IS NULL)
WHERE CC.CdCampanha =153
order by CdContato
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Ago 07, 2012 6:13 pm    Assunto: Responder com Citação

Boa noite,

Qual banco de dados (e versão) você está utilizando?
A tabela onde estão os vários contatos é a ContCampPessoa ou a PESSOASCONTATO?
Existe algum campo na tabela que permita identificar qual é o primeiro contato?

_________________
Assinatura: http://www.imoveisemexposicao.com.br/imoveis-venda-são_paulo-residencial
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Jeffytaboni
Aprendiz
Aprendiz


Registrado: Terça-Feira, 24 de Julho de 2012
Mensagens: 107

MensagemEnviada: Qua Ago 08, 2012 8:08 am    Assunto: Sql Duplicando registros Responder com Citação

Banco de dados SQL server 2008
È a tabela é a PEssoaContato, ate existe um que identifiqueo contato padrão
mais nem todos os clientes estão com um contato definido como padrão então gostaria que trouxesse somente o primeiro ou se tiver como trazer a onde tiver padrão traz ele onde não tiver traz o primeiro
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qua Ago 08, 2012 10:10 am    Assunto: Responder com Citação

Como é possível saber qual é o contato padrão (quando um está definido)?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Jeffytaboni
Aprendiz
Aprendiz


Registrado: Terça-Feira, 24 de Julho de 2012
Mensagens: 107

MensagemEnviada: Qua Ago 08, 2012 10:39 am    Assunto: Sql Duplicando registros Responder com Citação

Na tabela dos contatos existe um campo InPadrao se tiver como 1 esse contato e padrao se tiver com 0 não é

creio que é nesta linha que esta o problema mais nao consigo corrigir
pois o meu contato pode ser null tbm

LEFT JOIN PESSOASCONTATO P (NOLOCK) ON P.CdCliente = C.CdCliente AND (P.CdPessoa = CP.CdPessoa OR CP.CdPessoa IS NULL)

comentando depois do or ele não duplica mais, porém não me traz mais o dspessoacontato do cliente
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qua Ago 08, 2012 11:38 am    Assunto: Responder com Citação

Experimente adicionar "TOP 1" depois de Select para ver se você obtem o resultado desejado:

Código:
SELECT TOP 1 CC.CdCampanha, ...


Espero que ajude.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Jeffytaboni
Aprendiz
Aprendiz


Registrado: Terça-Feira, 24 de Julho de 2012
Mensagens: 107

MensagemEnviada: Qua Ago 08, 2012 11:39 am    Assunto: Sql Duplicando registros Responder com Citação

Top não funciona pois so me taz um registro da tbcampanha ai
eu preciso de todos desconsiderando os contatos dos mesmo cllientes
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qua Ago 08, 2012 12:17 pm    Assunto: Responder com Citação

Experimente desta forma:

Código:
with CTE as
(
    SELECT
        CC.CdCampanha,
        CC.CdContato,
        P.DsPessoa,
        P.DsTelefone,
        P.DsEmail,
        P.DtAniversario,
        CC.InStatus,
        CC.InAtivo,
        ROW_NUMBER() OVER(PARTITION BY CC.CdCampanha, CC.CdContato
                          ORDER BY P.InPadrao DESC) as RowNum
    FROM ContCamp CC
    LEFT JOIN ContCampPessoa CP (NOLOCK) ON (CP.CdCampanha = CC.CdCampanha) AND
                                            (CP.CdCliente = CC.CdContato)
    LEFT JOIN PESSOASCONTATO P (NOLOCK) ON (P.CdCliente = C.CdCliente) AND
                                           (P.CdPessoa = CP.CdPessoa OR CP.CdPessoa IS NULL)
    WHERE CC.CdCampanha =153
)

SELECT
    CT.CdCampanha,
    CT.CdContato,
    CT.DsPessoa AS DsPessoaContato,
    CT.DsTelefone AS DsTelefoneContato,
    CT.DsEmail AS DsEmailContato,
    CT.DtAniversario AS DtAniversarioContato,
    C.DsRazao AS DsEmpresa,
    T.CdOperadora,
    T.DsDDD,
    C.DsTelefone,
    A.DsAtividade,
    T.DsCidade,
    T.CdUf,
    F.DsFonte,
    I.DsInteresse,
    R.DsRepresentante,
    CT.InStatus,
    M.CdFonte,
    M.CdRepresentante2,
    M.CdInteresse,
    M.CdRepresentante,
    C.DsEMail,
    CT.InAtivo
FROM CTE CT
INNER JOIN Clientes C (NOLOCK) ON C.CdCliente = CT.CdContato
LEFT JOIN TBCIDADE T (NOLOCK) ON C.CdCidade = T.CdCidade
LEFT JOIN ClieMark M (NOLOCK) ON M.CdCliente = C.CdCliente
LEFT JOIN TBATIVID A (NOLOCK) ON M.CdAtividade = A.CdAtividade
LEFT JOIN TBFONTE F (NOLOCK) ON M.CdFonte = F.CdFonte
LEFT JOIN TBINTERE I (NOLOCK) ON M.CdInteresse = I.CdInteresse
LEFT JOIN Represen R (NOLOCK) ON M.CdRepresentante = R.CdRepresentante
WHERE CT.RowNum = 1
order by CdContato


Espero que ajude.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Jeffytaboni
Aprendiz
Aprendiz


Registrado: Terça-Feira, 24 de Julho de 2012
Mensagens: 107

MensagemEnviada: Qua Ago 08, 2012 4:52 pm    Assunto: Sql Duplicando registros Responder com Citação

Cara aparentemente resolveu mesmo, so tive alterar uma instrução sua ali e resolveu, pq estava me retornando o nome do contato null ai mudei um comando ali e funciono
mais você poderia me explicar o que Você fez tudo ali
sabe sou novato, ai to apredendo muita coisa ainda...
seria de ajuda..
mais mesmo assim mt obrigado
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qua Ago 08, 2012 6:23 pm    Assunto: Responder com Citação

Seguem alguns links:

http://msdn.microsoft.com/en-us/library/ms190766.aspx
http://msdn.microsoft.com/en-us/library/ms189798.aspx

Espero que seja útil.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB