none
JOIN 2000 para 2012 RRS feed

  • 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!

    sexta-feira, 11 de julho de 2014 16:49

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

    quarta-feira, 16 de julho de 2014 18:50
  • Funcionou!

    Perfeito! Agora vou estudar o código pra eu entender como usar isso em outras consultas.

    Muito grata!

    quinta-feira, 17 de julho de 2014 13:00
  • Obrigada, José!
    quinta-feira, 17 de julho de 2014 13:00

Todas as Respostas

  • Deleted
    sábado, 12 de julho de 2014 00:28
  • Deleted
    sábado, 12 de julho de 2014 00:50
  • 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...

    terça-feira, 15 de julho de 2014 14:49
  • Deleted
    quarta-feira, 16 de julho de 2014 16:48
  • 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... =\
    quarta-feira, 16 de julho de 2014 17:32
  • 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

    quarta-feira, 16 de julho de 2014 18:50
  • Deleted
    quinta-feira, 17 de julho de 2014 01:11
  • Funcionou!

    Perfeito! Agora vou estudar o código pra eu entender como usar isso em outras consultas.

    Muito grata!

    quinta-feira, 17 de julho de 2014 13:00
  • Obrigada, José!
    quinta-feira, 17 de julho de 2014 13:00