[Resolvido]Dúvida com SQL - Group by

Olá amigos estou com o seguinte problema:

tenho um conjunto de registros e vou agrupá-los pelo código do registro…esses registros entre outros campos também tem um “tipo de registro” < que é um campo numérico

Quando eu fizer o agrupamento dentro de cada grupo só pode ficar os registros que tiverem o “tipo de registro” igual a algum outro registro do grupo.

Exemplificando:

COD_REGISTRO   DESCRICAO   TIPO_REGISTRO

1                aaaaa               3
1                bbbbb               3

2                ccccc              45
2                dddd               45
2                eeee               3    << esse registro não pode aparecer pois seu tipo não esta duplicado com ninguém do grupo 

tentei fazer utilizando a cláusula having porém não obtive resultados…alguém tem alguma sugestão?

Agradeço qualquer ajuda!!!

Opa! coloca o seu sql pra gente analisar.

Meu SQL esta mais ou menos assim:

SELECT r.COD, r.DESCRICAO, r.TIPO from Registro r where r.COD in(1,2) and r.TIPO in(3,45) group by r.COD, 

o que me esta faltando é conhecimento para fazer o group by…aliás nem consegui descobrir se é possivel fazer o que estou tentando…

valeu

Não é muito minha praia mais vamos tentar ajudar… rsrs

SELECT Temp, Count(*)  from Registro r where r.COD in(1,2) and r.TIPO in(3,45) group by r.COD, r.TIPO where Temp > 1

sei lah tenta algo do tipo assim…

[quote=fabio.cbrandao]Não é muito minha praia mais vamos tentar ajudar… rsrs

SELECT Temp, Count(*)  from Registro r where r.COD in(1,2) and r.TIPO in(3,45) group by r.COD, r.TIPO where Temp > 1

sei lah tenta algo do tipo assim…[/quote]

Obrigado pela resposta…porém não funciona dessa maneira…repare que no outro grupo tem registros com o mesmo “TIPO”, ou seja o count dará maior que 1…só consigo identificar o registro que não é para aparecer depois de agrupado =s

up

Oi amigo!

Eu sei resolver… uso algo parecido, mas antes eu precisava saber uma coisa, sua tabela tem algum campo ID que possa identificar de forma única o registro?
Existe a possibilidade de termos registros idênticos repetidos? Quero dizer, os 3 campos que vc mostrou estarem todos iguaizinhos?

Responda por favor que eu monto pra vc… ah, me fala qual o BD que vc usa tb.

Mysql.

[quote=RenataFA]Oi amigo!

Eu sei resolver… uso algo parecido, mas antes eu precisava saber uma coisa, sua tabela tem algum campo ID que possa identificar de forma única o registro?
Existe a possibilidade de termos registros idênticos repetidos? Quero dizer, os 3 campos que vc mostrou estarem todos iguaizinhos?

Responda por favor que eu monto pra vc… ah, me fala qual o BD que vc usa tb.[/quote]

Oi Renata, obrigado pela resposta…

sim…minha tabela tem um campo ID que é unico para cada registro e também existe a possibilidade de os campos estarem idênticos, o banco é oracle…

O having funciona tambem no Oracle.

Dá uma olhada no link
http://www.psoug.org/reference/group_by.html

Nele tem varios exemplos de group by do oracle.

[quote=Don][quote=RenataFA]Oi amigo!

Eu sei resolver… uso algo parecido, mas antes eu precisava saber uma coisa, sua tabela tem algum campo ID que possa identificar de forma única o registro?
Existe a possibilidade de termos registros idênticos repetidos? Quero dizer, os 3 campos que vc mostrou estarem todos iguaizinhos?

Responda por favor que eu monto pra vc… ah, me fala qual o BD que vc usa tb.[/quote]

Oi Renata, obrigado pela resposta…

sim…minha tabela tem um campo ID que é unico para cada registro e também existe a possibilidade de os campos estarem idênticos, o banco é oracle…

[/quote]

Bem amigo, eu resolvi sem usar o GROUP BY. Se vc precisar agrupar depois, vc usa. O fato é que vc disse que precisava listar sempre que o tipo_registro estivesse duplicado com alguém mais do grupo (ou seja, do cod_registro, pelo que entendi).

Para esse tipo de situação, não preciso do GROUP BY. Fiz assim:

[code]select h.cod_registro, h.descricao, h.tipo_registro
from registro h

left join registro i on i.cod_registro = h.cod_registro
and i.tipo_registro = h.tipo_registro
and i.id <> h.id

where i.id is not null[/code]

Tá simples, sem ordenar, sem agrupar, sem nada. Ai vc vê o que mais vc precisa.
Explicando o que eu fiz: eu fiz um join relacionando a tabela a ela mesma, relaciono a tabela registro a própria tabela registro. Tento encontrar um outro registro diferente do que eu estou (por isso pego quando os IDs forem diferentes) que também possua o mesmo cod_registro e tipo_registro. Se eu encontrar (por isso o i.id is not null) eu trago o registro, senão não.

Execute ai e veja como fica. Aqui ficou assim:

cod_registro,descricao,tipo_registro 1, 'bbbbb', 3 1, 'aaaaa', 3 2, 'ddddd', 45 2, 'ccccc', 45

Qq dúvida é só falar.

[]'s
Renata

Os duplicados são sempre só 2? Assim de repente acho que isso não funciona se houver, por exemplo, o seguinte caso:

    cod_registro,descricao,tipo_registro  
    1, 'bbbbb', 3  
    1, 'aaaaa', 3  
    1, 'xxxxx', 3  
    2, 'ddddd', 45  
    2, 'ccccc', 45  
    3, 'zzzzz', 25  

Bom, o que entendi é que tem que ter outro do msm tipo_registro dentro do mesmo cod_registro. Independente de se é duplicado, triplicado, quaduplicado, etc…rs…

Se não for isso avise…

resolvido…muito obrigado Renata!!!