Usuário com melhor resposta
Ajuda com select em tabelas diferentes....

Pergunta
-
Olá pessoal! Estou precisando de uma ajuda para criar um select onde eu possa comparar os resultados da seguinte forma:
Tenho dois selects que me retornam dois resultados diferentes, sendo o primeiro:// ESTE SELECT ME RETORNA A SEQUENCIA QUE O TRE DETERMINOU
SELECT TOP (100) PERCENT COUNT(TRE_INSERCOES.TRE_INSERCOES_ID) AS N, COLIGACOES.COLIGACAO_NOME, COLIGACOES.CIDADE
FROM COLIGACOES INNER JOIN TRE_INSERCOES ON COLIGACOES.COLIGACAO_ID = TRE_INSERCOES.COLIGACAO_ID
WHERE (TRE_INSERCOES.TRE_INSERCOES_DATA = @DATA) AND (TRE_INSERCOES.TRE_INSERCOES_BLOCO = @BLOCO)
AND (COLIGACOES.CIDADE = @CIDADE) AND TRE_INSERCOES_CARGO = @TRE_INSERCOES_CARGO
GROUP BY COLIGACOES.COLIGACAO_NOME, COLIGACOES.CIDADE
ORDER BY COLIGACOES.COLIGACAO_NOME// ESTE SELECT ME RETORNA O QUE REALMENTE VEICULOU E FOI COLETADO PELA EMPRESA
SELECT TOP (100) PERCENT COUNT(COLETA_ID) AS N, EMISSORA_NOME, COLIGACAO_NOME
FROM vColetaDetalhes
WHERE (HP = 'False') AND (HS_INICIO >= @DATA_INICIO) AND (HS_INICIO <= @DATA_FINAL)
AND (CIDADE = @CIDADE) AND (EMISSORA_NOME = @EMISSORA)
GROUP BY EMISSORA_NOME, COLIGACAO_NOME
ORDER BY COLIGACAO_NOMECOMO RESULTADO NO MEU RELATÓRIO FICA DESSA FORMA:
GOSTARIA DE FAZER NO PRÓPRIO SELECT UMA "COMPARAÇÃO" E USAR APENAS UMA TABELA DESSA FORMA:
A DIFICULDADE É QUE ESSES DADOS SÃO RESULTADO DE CONTAGENS EM TABELAS DIFERENTES, E QUANDO NÃO EXISTE REGISTRO COLETADO ELE NÃO RETORNA 0...COMO POSSO FAZER ISSO DIRETAMENTE NO SELECT?? SE TIVER CONFUSO POSSO DAR MAIS DETALHES...
DESDE JÁ OBRIGADO!
- Editado Mario CBA sábado, 25 de agosto de 2012 16:43
Respostas
-
Mario,
Você deve mudar a construção da CTE, por exemplo:
;WITH InsercoesTRE AS ( SELECT TOP (100) PERCENT COUNT(TRE.TRE_INSERCOES_ID) AS N, COL.COLIGACAO_NOME, COL.CIDADE FROM COLIGACOES COL INNER JOIN TRE_INSERCOES TRE ON COL.COLIGACAO_ID = TRE.COLIGACAO_ID WHERE TRE.TRE_INSERCOES_DATA = @DATA AND TRE.TRE_INSERCOES_BLOCO = @BLOCO AND COL.CIDADE = @CIDADE AND TRE_INSERCOES_CARGO = @TRE_INSERCOES_CARGO GROUP BY COL.COLIGACAO_NOME, COL.CIDADE ORDER BY COL.COLIGACAO_NOME ) SELECT TOP (100) PERCENT COUNT(vw.COLETA_ID) AS N, TRE.N, vw.EMISSORA_NOME, vw.COLIGACAO_NOME FROM vColetaDetalhes vw INNER JOIN InsercoesTRE TRE ON TRE.Coligacao_Nome = vw.Coligacao_Nome AND TRE.EMISSORA_NOME = vw.EMISSORA_NOME WHERE vw.HP = 'False' AND vw.HS_INICIO >= @DATA_INICIO AND vw.HS_INICIO <= @DATA_FINAL AND vw.CIDADE = @CIDADE AND vw.EMISSORA_NOME = @EMISSORA GROUP BY vw.EMISSORA_NOME, vw.COLIGACAO_NOME ORDER BY vw.COLIGACAO_NOME
Tenta rodar a query no sql antes de utilizá-la na aplicação, fica mais fácil de descobrir os erros e corrigi-los, se for o caso.
[]'s
Philipe Souza
E-mail: Philipe.s.souza@hotmail.com- Marcado como Resposta Mario CBA quarta-feira, 29 de agosto de 2012 13:07
Todas as Respostas
-
Olá Mario,
Pelo que entendi, você usaria os campos EMISSORA_NOME e COLIGACAO_NOME para relacionar as duas consultas, não é?
Então, acredito que o exemplo a seguir pode te ajudar.
;WITH InsercoesTRE AS ( SELECT TOP (100) PERCENT COUNT(TRE_INSERCOES.TRE_INSERCOES_ID) AS N, COL.COLIGACAO_NOME, COL.CIDADE FROM COLIGACOES COL INNER JOIN TRE_INSERCOES TRE ON COL.COLIGACAO_ID = TRE.COLIGACAO_ID WHERE TRE.TRE_INSERCOES_DATA = @DATA AND TRE.TRE_INSERCOES_BLOCO = @BLOCO AND COL.CIDADE = @CIDADE AND TRE_INSERCOES_CARGO = @TRE_INSERCOES_CARGO GROUP BY COL.COLIGACAO_NOME, COL.CIDADE ORDER BY COL.COLIGACAO_NOME ) SELECT TOP (100) PERCENT COUNT(vw.COLETA_ID) AS N, TRE.N, vw.EMISSORA_NOME, vw.COLIGACAO_NOME FROM vColetaDetalhes vw INNER JOIN InsercoesTRE TRE ON TRE.Coligacao_Nome = vw.Coligacao_Nome AND TRE.EMISSORA_NOME = vw.EMISSORA_NOME WHERE vw.HP = 'False' AND vw.HS_INICIO >= @DATA_INICIO AND vw.HS_INICIO <= @DATA_FINAL AND vw.CIDADE = @CIDADE AND vw.EMISSORA_NOME = @EMISSORA GROUP BY vw.EMISSORA_NOME, vw.COLIGACAO_NOME ORDER BY vw.COLIGACAO_NOME
[]'s
Philipe Souza
E-mail: Philipe.s.souza@hotmail.com- Marcado como Resposta Harley Araujo segunda-feira, 27 de agosto de 2012 15:12
- Não Marcado como Resposta Mario CBA terça-feira, 28 de agosto de 2012 21:02
-
Olá Philipe.
Acredito que esse realmente seja o caminho, mas quando executo esse select tenho o seguinte erro:
Obs: USO apenas o campo COLIGACAO_NOME para vincular... O campo emissora so temos na COLETA....
Fiz vários testes mas não consigo encontrar a solução. Por favor me ajude pois não sou expert em SQLObrigado pela ajuda!
-
Mario,
Você deve mudar a construção da CTE, por exemplo:
;WITH InsercoesTRE AS ( SELECT TOP (100) PERCENT COUNT(TRE.TRE_INSERCOES_ID) AS N, COL.COLIGACAO_NOME, COL.CIDADE FROM COLIGACOES COL INNER JOIN TRE_INSERCOES TRE ON COL.COLIGACAO_ID = TRE.COLIGACAO_ID WHERE TRE.TRE_INSERCOES_DATA = @DATA AND TRE.TRE_INSERCOES_BLOCO = @BLOCO AND COL.CIDADE = @CIDADE AND TRE_INSERCOES_CARGO = @TRE_INSERCOES_CARGO GROUP BY COL.COLIGACAO_NOME, COL.CIDADE ORDER BY COL.COLIGACAO_NOME ) SELECT TOP (100) PERCENT COUNT(vw.COLETA_ID) AS N, TRE.N, vw.EMISSORA_NOME, vw.COLIGACAO_NOME FROM vColetaDetalhes vw INNER JOIN InsercoesTRE TRE ON TRE.Coligacao_Nome = vw.Coligacao_Nome AND TRE.EMISSORA_NOME = vw.EMISSORA_NOME WHERE vw.HP = 'False' AND vw.HS_INICIO >= @DATA_INICIO AND vw.HS_INICIO <= @DATA_FINAL AND vw.CIDADE = @CIDADE AND vw.EMISSORA_NOME = @EMISSORA GROUP BY vw.EMISSORA_NOME, vw.COLIGACAO_NOME ORDER BY vw.COLIGACAO_NOME
Tenta rodar a query no sql antes de utilizá-la na aplicação, fica mais fácil de descobrir os erros e corrigi-los, se for o caso.
[]'s
Philipe Souza
E-mail: Philipe.s.souza@hotmail.com- Marcado como Resposta Mario CBA quarta-feira, 29 de agosto de 2012 13:07
-
Agora funcionou!!! Muito obrigado Philipe, não teria chego nesse resultado sem sua ajuda... agora o relatório vai ficar show!
Fiz apenas duas correções e funcionou segue modelo que esta rodando perfeitamente:
WITH InsercoesTRE AS (SELECT TOP (100) PERCENT COUNT(TRE.TRE_INSERCOES_ID) AS N, COL.COLIGACAO_NOME, COL.CIDADE FROM COLIGACOES AS COL INNER JOIN TRE_INSERCOES AS TRE ON COL.COLIGACAO_ID = TRE.COLIGACAO_ID WHERE (TRE.TRE_INSERCOES_DATA = @DATA) AND (TRE.TRE_INSERCOES_BLOCO = @BLOCO) AND (COL.CIDADE = @CIDADE) AND (TRE.TRE_INSERCOES_CARGO = @TRE_INSERCOES_CARGO) GROUP BY COL.COLIGACAO_NOME, COL.CIDADE ORDER BY COL.COLIGACAO_NOME) SELECT TOP (100) PERCENT vw.COLIGACAO_NOME, vw.EMISSORA_NOME, TRE.N AS TRE, COUNT(vw.COLETA_ID) AS AFPL FROM vColetaDetalhes AS vw INNER JOIN InsercoesTRE AS TRE ON TRE.COLIGACAO_NOME = vw.COLIGACAO_NOME WHERE (vw.HP = 'False') AND (vw.HS_INICIO >= @DATA_INICIO) AND (vw.HS_INICIO <= @DATA_FINAL) AND (vw.CIDADE = @CIDADE) AND (vw.EMISSORA_NOME = @EMISSORA) GROUP BY vw.COLIGACAO_NOME, TRE.N, vw.EMISSORA_NOME ORDER BY vw.COLIGACAO_NOME
VLW!!!