Usuário com melhor resposta
JOIN 2000 para 2012

Pergunta
-
Meu banco de dados foi migrado do SQLServer 2000 para o 2012 e percebi alguns problemas de versão.
A consulta abaixo, no 2000 trazia registros e no 2012 nao traz. Podem me auxiliar?
select g.id_coordenacao cdger, g.de_coordenacao dsger, count(d.assunto) as qtde, t.competencia, 'AT' as tipo from sifagtelefonico_ d, tb_coordenacao_ g, (select distinct competencia from sifagtelefonico_ where (competencia between '20140401' and '20140501')) t where (d.competencia between '20140401' and '20140501') and d.cdger =* g.id_coordenacao and d.competencia =* t.competencia and (g.id_coordenacao = -1 or -1=-1) and g.id_coordenacao <> 1 and g.id_coordenacao =3 group by t.competencia, g.de_coordenacao, g.id_coordenacao
Para este exemplo, a tabela de coordenacao possui valores para a coordenacao 3 e a subquery g traz 2 meses.
Sendo assim, a consulta deveria trazer os dois meses para a coordenacao 3, porem sem valores da tabela sifagtelefonico.
Substitui por rigth join e tudo mais, mas nao deu certo, continuou a nao trazer os dados.
Como seria a consulta correta? E outra, no 2012 nao tem como MESMO usar o =*? (a maioria dos programas que dou manutencao utilizam esta sintaxe)
GRata!
Respostas
-
Boa tarde,
Experimente dessa forma:
with CTE_Competencias as ( select distinct competencia from sifagtelefonico_ where competencia between '20140401' and '20140501' ) select g.id_coordenacao cdger, g.de_coordenacao dsger, count(d.assunto) as qtde, t.competencia, 'AT' as tipo from tb_coordenacao_ g cross join CTE_Competencias as t left join sifagtelefonico_ d on d.cdger = g.id_coordenacao and d.competencia = t.competencia where -- (g.id_coordenacao = -1 or -1=-1) and -- g.id_coordenacao <> 1 and g.id_coordenacao = 3 group by g.id_coordenacao, g.de_coordenacao, t.competencia
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Ricardo Barbosa Cortes quinta-feira, 17 de julho de 2014 18:14
-
Funcionou!
Perfeito! Agora vou estudar o código pra eu entender como usar isso em outras consultas.
Muito grata!
- Marcado como Resposta Ricardo Barbosa Cortes quinta-feira, 17 de julho de 2014 18:14
-
Obrigada, José!
- Marcado como Resposta Ricardo Barbosa Cortes quinta-feira, 17 de julho de 2014 18:14
Todas as Respostas
-
Deleted
- Sugerido como Resposta Ricardo Barbosa Cortes segunda-feira, 14 de julho de 2014 12:32
- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 14 de julho de 2014 19:32
- Não Marcado como Resposta Ricardo Barbosa Cortes terça-feira, 15 de julho de 2014 19:25
- Não Sugerido como Resposta Ricardo Barbosa Cortes terça-feira, 15 de julho de 2014 19:26
-
Deleted
- Sugerido como Resposta Ricardo Barbosa Cortes segunda-feira, 14 de julho de 2014 12:32
- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 14 de julho de 2014 19:32
- Não Marcado como Resposta Ricardo Barbosa Cortes terça-feira, 15 de julho de 2014 19:25
- Não Sugerido como Resposta Ricardo Barbosa Cortes terça-feira, 15 de julho de 2014 19:25
-
José, é sim gerado por um programa.
É um relatório...
Fiz o teste com a consulta que voce me forneceu e o resultado nao foi o esperado.
Eu gostaria que o dado de competencia viesse da consulta T, o dado de coordenacao viesse da tabela G mesmo nao existindo estes dados na tabela D... assim, viriam os outros dados e o count traria 0.
Entende?
Nao consegui fazer uma consulta que retornasse este resultado...
-
Deleted
- Sugerido como Resposta Ricardo Barbosa Cortes quarta-feira, 16 de julho de 2014 17:24
- Não Sugerido como Resposta Ricardo Barbosa Cortes quinta-feira, 17 de julho de 2014 18:13
-
Ainda não funcionou, José... =\
Tá bem dificil achar um código que traga o mesmo resultado de antes.
Antes trazia para este código a resposta:
cdger: 3 (traz esse campo da tabela tb_coordenacao)
dsger: Aplicação (traz esse campo da tabela tb_coordenacao)
qtde: 0 (não existe registro para esta cdger na tabela sifagtelefonico_)
competencia: 01/04/2014 e 01/05/2014 (busca da subconsulta T)
Agora não traz dado algum, visto que a coordenacao 3 nao existe na tabela sifagtelefonico no periodo e, como a data da subconsulta trazida nao existe para esta mesma coordenacao na tabela sifagtelefonico...
Nada é trazido... =\ -
Boa tarde,
Experimente dessa forma:
with CTE_Competencias as ( select distinct competencia from sifagtelefonico_ where competencia between '20140401' and '20140501' ) select g.id_coordenacao cdger, g.de_coordenacao dsger, count(d.assunto) as qtde, t.competencia, 'AT' as tipo from tb_coordenacao_ g cross join CTE_Competencias as t left join sifagtelefonico_ d on d.cdger = g.id_coordenacao and d.competencia = t.competencia where -- (g.id_coordenacao = -1 or -1=-1) and -- g.id_coordenacao <> 1 and g.id_coordenacao = 3 group by g.id_coordenacao, g.de_coordenacao, t.competencia
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Ricardo Barbosa Cortes quinta-feira, 17 de julho de 2014 18:14
-
-
Funcionou!
Perfeito! Agora vou estudar o código pra eu entender como usar isso em outras consultas.
Muito grata!
- Marcado como Resposta Ricardo Barbosa Cortes quinta-feira, 17 de julho de 2014 18:14
-
Obrigada, José!
- Marcado como Resposta Ricardo Barbosa Cortes quinta-feira, 17 de julho de 2014 18:14