none
consulta sql RRS feed

  • Pergunta

  • emp   matr       data           irreg
    2	1193	 2013-05-29 	17
    2	1193	 2013-05-31 	18
    2	1193	 2013-06-04 	17
    2	1193	 2013-06-04 	18
    Preciso de uma consulta que me traga apenas o dia 04/06 por ter a irreg 17 e 18 no mesmo dia. Os demais dias não preciso pq tem apenas a irreg 17 ou 18. Alguém pode me ajudar? Obrigado

    quinta-feira, 6 de junho de 2013 19:19

Todas as Respostas

  • Boa tarde,

    Eduardo, experimente mais ou menos dessa forma:

    with CTE_D as
    (
        select 
            Emp, 
            Matr, 
            Data, 
            count(case when irreg = 17 then 1 end) as Qtd17,
            count(case when irreg = 18 then 1 end) as Qtd18
        from Tabela
        group
            Emp, 
            Matr, 
            Data
    )
    
    select t.*
    from CTE_D as c
    inner join Tabela as t
        on 
            t.Emp = c.Emp and
            t.Matr = c.Matr and
            t.Data = c.Data
    where 
        c.Qtd17 > 0 and
        c.Qtd18 > 0

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 6 de junho de 2013 19:49
  • Obrigado Gapimex, mas acho que não fui claro....

    Preciso que seja gerado na consulta apenas o dia 04/06, pois neste mesmo dia a irreg (cod irregularidade) mostra 17 e 18. Nos outros dias ou tem o 17 ou tem 18. Só quero quando tiver os dois (17 e 18) no mesmo dia...

    Pode me ajudar?

    Obrigado

    quinta-feira, 6 de junho de 2013 20:05
  • Acredito que corrigindo o erro de sintaxe (faltou o By depois do Group) e adaptando o nome da tabela, o script que sugeri acima deveria apresentar o resultado esperado.

    Experimente fazer um teste com o script abaixo:

    declare @Tabela table
    (emp int, matr int, data date, irreg int);
    
    insert into @Tabela values
    (2,	1193, '2013-05-29', 17),
    (2,	1193, '2013-05-31',	18),
    (2,	1193, '2013-06-04',	17),
    (2,	1193, '2013-06-04',	18);
    
    with CTE_D as
    (
        select 
            Emp, 
            Matr, 
            Data, 
            count(case when irreg = 17 then 1 end) as Qtd17,
            count(case when irreg = 18 then 1 end) as Qtd18
        from @Tabela
        group by
            Emp, 
            Matr, 
            Data
    )
    
    select t.*
    from CTE_D as c
    inner join @Tabela as t
        on 
            t.Emp = c.Emp and
            t.Matr = c.Matr and
            t.Data = c.Data
    where 
        c.Qtd17 > 0 and
        c.Qtd18 > 0

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 6 de junho de 2013 20:32
  • Deleted
    sexta-feira, 7 de junho de 2013 22:37