 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
Jeffytaboni Aprendiz

Registrado: Terça-Feira, 24 de Julho de 2012 Mensagens: 107
|
Enviada: Ter Ago 07, 2012 6:00 pm Assunto: Sql Duplicando registros |
|
|
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 |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Ago 07, 2012 6:13 pm Assunto: |
|
|
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 |
|
 |
Jeffytaboni Aprendiz

Registrado: Terça-Feira, 24 de Julho de 2012 Mensagens: 107
|
Enviada: Qua Ago 08, 2012 8:08 am Assunto: Sql Duplicando registros |
|
|
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 |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qua Ago 08, 2012 10:10 am Assunto: |
|
|
| Como é possível saber qual é o contato padrão (quando um está definido)? |
|
| Voltar ao Topo |
|
 |
Jeffytaboni Aprendiz

Registrado: Terça-Feira, 24 de Julho de 2012 Mensagens: 107
|
Enviada: Qua Ago 08, 2012 10:39 am Assunto: Sql Duplicando registros |
|
|
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 |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qua Ago 08, 2012 11:38 am Assunto: |
|
|
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 |
|
 |
Jeffytaboni Aprendiz

Registrado: Terça-Feira, 24 de Julho de 2012 Mensagens: 107
|
Enviada: Qua Ago 08, 2012 11:39 am Assunto: Sql Duplicando registros |
|
|
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 |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qua Ago 08, 2012 12:17 pm Assunto: |
|
|
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 |
|
 |
Jeffytaboni Aprendiz

Registrado: Terça-Feira, 24 de Julho de 2012 Mensagens: 107
|
Enviada: Qua Ago 08, 2012 4:52 pm Assunto: Sql Duplicando registros |
|
|
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 |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
|
| Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|