Jump to content

SELECT - COUNT


williamjda

Recommended Posts

Amigos, boa tarde.

Estou com uma duvida que está a me empacar. Preciso que meu SELECT me retorne o usuário que contenha um contrato do tipo F e J.

Exemplo: Tenho duas tabelas uma USUARIO e outra USUARIO_ENTIDADE. Na tabela USUARIO tem um campo chamado IND_PARTICIPACAO onde esse campo me diz que o USUARIO tem dois tipos de contrato. Sendo (J - JURIDICO) e outro (F-FISICO). O mesmo usuário pode ter os dois contratos. Preciso que meu SELECT retorne apenas os usuários que possua os dois contratos.

No select que eu fiz ele conta os usuários que contenham mais de um contrato. Mas não especifica os que tem o J e F. O select precisa me retornar apenas os usuários que tenham um F e outro F. Ou seja os dois tipos. E não os que tenham dois F ou 2 J.

Ele até pode trazer usuários que contenha dois F e um J. Mas tem que ter os dois no retorno. 

SELECT E.NUM_CPF, COUNT(E.NUM_CPF)  FROM USUARIO A
INNER JOIN USUARIO_ENTIDADE E ON A.COD_ENTIDADE_TS = E.COD_ENTIDADE_TS
WHERE A.IND_SITUACAO ='A' AND A.COD_OPERADORA = 1
GROUP BY E.NUM_CPF
HAVING COUNT (E.NUM_CPF) >= 2 

Att;

William

Edited by williamjda
Link to comment
Share on other sites

Antes de mais, um select retorna dados, não retorna condições.
Para fazeres o que queres tens de fazer um inner join com a tabela USUARIO, uma onde garantes que ele tem o IND_PARTICIPACAO = J e outra onde garantes que ele tem o IND_PARTICIPACAO = F.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

Boa tarde. Obrigado por responder. Nas duas tabelas acima contem informações de usuários em todas as situações que preciso.

A tabela USUARIO tem as informações de usuário dados pessoais. E a USUARIO_ENTIDADE tem os contratos e os tipos de contratos

A consulta acima conforme mencionei me retorna usuários que tem mais de um tipo de contrato na tabela USUARIO_ENTIDADE. Da seguinte forma quando executado.

NUM_CPF | QTD
1234555      2
4444442      2
5555555      2
4566662      3
2222222      2

Após este resultado tenho que pegar o consultar o CPF para ver os tipos de contrato que ele possui. EXE: Pode ser que o primeiro tenha dois do tipo FF ou do tipo JJ e se ele retornar 100 linhas eu teria que consultar uma por uma para saber qual é o tipo.

O que eu preciso é: O select deve me retornar na consulta apenas os CPF que contenha os dois tipos sendo uma F e outro J. Ele pode até retornar um que contenha três F e um J ou 2 J e um F.

Desde que ele contenha os dois tipos. 

Edited by williamjda
Link to comment
Share on other sites

@HappyHippyHippo, creio que o IN não vai funcionar pois não estás a garantir que tens pelo menos um F e um J.

@williamjda, não percebo se chegaste a experimentar o que te disse.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

select *
  from Tbl1,
       (select Tbl1.id
          from Tbl1 inner join Tbl2 on Tbl1.ref = Tbl2.id
         where Tbl2.type = 'E') AS Aux1,
       (select Tbl1.id
          from Tbl1 inner join Tbl2 on Tbl1.ref = Tbl2.id
         where Tbl2.type = 'J') AS Aux2
 where Tbl1.id IN Aux1
   and Tbl2.id IN Aux2
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Bom vou tentar detalhar o máximo possível.

As duas tabelas tem em comum os campos NOME_USUARIO, NUM_CPF. Então preciso saber na tabela USUARIO_ENTIDADE quais são os contratos da tabela USUARIO que na tabela USUARIO_ENTIDADE contenha os dois tipos de situação F e J.

 

Ou seja o CPF 123456789 da tabela USUARIO tem dois registros na tabela USUARIO_ENTIDADE. 

NUM_CPF  | QTD

123456789    2

Só que esses tem que ser um J e um F. 

Na minha query ela retorna variados e eu tenho que descobrir em um segundo select. Sendo que no resultado ele me traga 100 linhas preciso consultar um cpf por vez para saber se ele é um J e um F.

Eu preciso que essa resposta seja sempre cpf que contenha o F e um J independente da quantidade de F ele tiver ou J para o mesmo CPF

Link to comment
Share on other sites

35 minutos atrás, HappyHippyHippo disse:

select *
  from Tbl1,
       (select Tbl1.id
          from Tbl1 inner join Tbl2 on Tbl1.ref = Tbl2.id
         where Tbl2.type = 'E') AS Aux1,
       (select Tbl1.id
          from Tbl1 inner join Tbl2 on Tbl1.ref = Tbl2.id
         where Tbl2.type = 'J') AS Aux2
 where Tbl1.id IN Aux1
   and Tbl2.id IN Aux2

A consulta me retorna o seguinte erro: SELECT - 0 row(s), 0.000 secs]  [Error Code: 933, SQL State: 42000]  ORA-00933: comando SQL não encerrado adequadamente

Estou usuando o dbVisualizer para fazer as consultas

35 minutos atrás, HappyHippyHippo disse:

select *
  from Tbl1,
       (select Tbl1.id
          from Tbl1 inner join Tbl2 on Tbl1.ref = Tbl2.id
         where Tbl2.type = 'E') AS Aux1,
       (select Tbl1.id
          from Tbl1 inner join Tbl2 on Tbl1.ref = Tbl2.id
         where Tbl2.type = 'J') AS Aux2
 where Tbl1.id IN Aux1
   and Tbl2.id IN Aux2

A consulta me retorna o seguinte erro: SELECT - 0 row(s), 0.000 secs]  [Error Code: 933, SQL State: 42000]  ORA-00933: comando SQL não encerrado adequadamente

Estou usuando o dbVisualizer para fazer as consultas

Link to comment
Share on other sites

20 minutos atrás, HappyHippyHippo disse:

o código apresentado é claramente uma apresentação de um modelo de solução, de longue é um solução copy-paste ...

Desculpe é que eu esqueci de colocar a query que fiz.

SELECT * FROM USUARIO A,
    (SELECT A.CODIGO FROM USUARIO A INNER JOIN PLANO_MEDICO B ON A.CODIGO = B.CODIGO
    WHERE B.SITUACAO = 'S') AS AUX1,

   (SELECT A.CODIGO FROM USUARIO A INNER JOIN PLANO_MEDICO B ON A.CODIGO = B.CODIGO
    WHERE B.SITUACAO = 'N') AS AUX2

WHERE A.CODIGO IN Aux1
  AND B.CODIGO IN Aux2
Edited by williamjda
Link to comment
Share on other sites

ainda mais simples:

SELECT AUX1.*
  FROM (SELECT USUARIO.*
          FROM USUARIO INNER JOIN PLANO_MEDICO ON USUARIO.CODIGO = PLANO_MEDICO.CODIGO
         WHERE PLANO_MEDICO.SITUACAO = 'S') AS AUX1,
       (SELECT USUARIO.*
          FROM USUARIO INNER JOIN PLANO_MEDICO ON USUARIO.CODIGO = PLANO_MEDICO.CODIGO
         WHERE PLANO_MEDICO.SITUACAO = 'N') AS AUX2
WHERE AUX1.CODIGO = AUX2.CODIGO
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

SELECT USUARIO.*
FROM USUARIO 
INNER JOIN PLANO_MEDICO as S
    ON USUARIO.CODIGO = S.CODIGO
    and S.SITUACAO = 'S'
INNER JOIN PLANO_MEDICO as N 
    ON USUARIO.CODIGO = N.CODIGO
    and N.SITUACAO = 'N'
WHERE S.CODIGO = N.CODIGO;
10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.