williamjda Posted March 1, 2017 at 02:49 PM Report Share #602803 Posted March 1, 2017 at 02:49 PM (edited) 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 March 1, 2017 at 04:34 PM by williamjda Link to comment Share on other sites More sharing options...
M6 Posted March 1, 2017 at 03:44 PM Report Share #602805 Posted March 1, 2017 at 03:44 PM 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 More sharing options...
williamjda Posted March 1, 2017 at 04:37 PM Author Report Share #602807 Posted March 1, 2017 at 04:37 PM (edited) 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 March 1, 2017 at 04:46 PM by williamjda Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted March 1, 2017 at 04:51 PM Report Share #602808 Posted March 1, 2017 at 04:51 PM o que pretendes é facilmente obtido através desta funcionalidade : https://msdn.microsoft.com/en-us/library/ms177682.aspx como compor realmente o SQL, não posso responder porque não percebo a estrutura de tabelas que descreves IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
M6 Posted March 1, 2017 at 05:02 PM Report Share #602809 Posted March 1, 2017 at 05:02 PM @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 More sharing options...
HappyHippyHippo Posted March 1, 2017 at 05:08 PM Report Share #602810 Posted March 1, 2017 at 05:08 PM 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 Portugol Plus Link to comment Share on other sites More sharing options...
williamjda Posted March 1, 2017 at 05:15 PM Author Report Share #602812 Posted March 1, 2017 at 05:15 PM 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 More sharing options...
williamjda Posted March 1, 2017 at 05:43 PM Author Report Share #602817 Posted March 1, 2017 at 05:43 PM 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 More sharing options...
HappyHippyHippo Posted March 1, 2017 at 05:57 PM Report Share #602820 Posted March 1, 2017 at 05:57 PM o código apresentado é claramente uma apresentação de um modelo de solução, de longue é um solução copy-paste ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
williamjda Posted March 1, 2017 at 06:04 PM Author Report Share #602821 Posted March 1, 2017 at 06:04 PM (edited) 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 March 1, 2017 at 06:17 PM by williamjda Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted March 2, 2017 at 10:19 AM Report Share #602825 Posted March 2, 2017 at 10:19 AM 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 Portugol Plus Link to comment Share on other sites More sharing options...
M6 Posted March 2, 2017 at 04:13 PM Report Share #602831 Posted March 2, 2017 at 04:13 PM 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now