Travei

SQL Server

SQL

Banco de Dados

30/11/2018

Galera, preciso de uma ajuda na seguinte questão:

Exibir todos os correntistas que tem o mesmo tipo de conta do correntista “MISAEL PINHEIRO DA SILVA JUNIOR”, mostrando nome do cliente, CEP, conta,
saldo da conta, tipo da conta, endereço do cliente (nome e número do endereço) e município do cliente, ordenando pelo nome em ordem decrescente.

SELECT COR.NM_NOME, LGR.ID_CEP, CON.ID_CONTA, CON.VL_SALDO, TI.NM_TIPO_CONTA, LGR.NM_NOME, MUN.NM_MUNICIPIO
FROM TAB_CONTA CON
INNER JOIN TAB_CORRENTISTA COR
ON CON.ID_CORRENTISTA = COR.ID_CORRENTISTA
INNER JOIN TAB_MUNICIPIO MUN
ON COR.ID_MUNICIPIO = MUN.ID_MUNICIPIO
INNER JOIN TAB_LOGRADOURO LGR
ON MUN.ID_MUNICIPIO = LGR.ID_MUNICIPIO
INNER JOIN TAB_TIPO_CONTA TI
ON CON.ID_TIPO_CONTA = TI.ID_TIPO_CONTA
WHERE COR.NM_NOME LIKE



Eu travei aqui e na realidade não sei se está certo, me ajudem por favor...
Julio Cesar

Julio Cesar

Curtidas 0

Respostas

Ricardo Pestana

Ricardo Pestana

30/11/2018

Assim não dá certo?

SELECT COR.NM_NOME, LGR.ID_CEP, CON.ID_CONTA, CON.VL_SALDO, TI.NM_TIPO_CONTA, LGR.NM_NOME, MUN.NM_MUNICIPIO
FROM TAB_CONTA CON
INNER JOIN TAB_CORRENTISTA COR
ON CON.ID_CORRENTISTA = COR.ID_CORRENTISTA
INNER JOIN TAB_MUNICIPIO MUN
ON COR.ID_MUNICIPIO = MUN.ID_MUNICIPIO
INNER JOIN TAB_LOGRADOURO LGR
ON MUN.ID_MUNICIPIO = LGR.ID_MUNICIPIO
INNER JOIN TAB_TIPO_CONTA TI
ON CON.ID_TIPO_CONTA = TI.ID_TIPO_CONTA
WHERE CON.ID_TIPO_CONTA IN (SELECT ID_TIPO_CONTA FROM TAB_CONTA WHERE NM_NOME LIKE 'MISAEL PINHEIRO DA SILVA JUNIOR');
GOSTEI 0
Julio Cesar

Julio Cesar

30/11/2018

Fala Ricardo, na ultima linha "WHERE NM_NOME LIKE 'MISAEL PINHEIRO DA SILVA JUNIOR');" não tem NM_NOME, na tabela conta, só na tabela correntista.
GOSTEI 0
Ricardo Pestana

Ricardo Pestana

30/11/2018


Julio,

Testa esse select, se ele funcionar vc substituí ele na subquery ...

SELECT C.ID_TIPO_CONTA FROM TAB_CONTA C INNER JOIN TAB_CORRENTISTA CLI ON CLI.ID_CORRENTISTA = C.ID_CORRENTISTA
WHERE CLI.NM_NOME LIKE 'MISAEL PINHEIRO DA SILVA JUNIOR'
GOSTEI 0
Julio Cesar

Julio Cesar

30/11/2018

Obrigado Ricardo, deu certo agora. Agradeço de mais.
GOSTEI 0
Julio Cesar

Julio Cesar

30/11/2018

Ricardo, se ainda estiver ai, consegue me ajudar a organizar os nomes dos clientes por ordem?
GOSTEI 0
Owl

Owl

30/11/2018

Boa noite,

Segue uma sugestão que pode ser bem interessante também.
O tipo da conta do cliente de nome 'MISAEL PINHEIRO DA SILVA JUNIOR', é uma condição que pré determina o resultado da tua consulta. Sendo assim é possível realizar uma consulta somente para pegar o tipo da conta desse cliente e atribuir isso numa variável, onde o resultado dessa variável você utiliza na sua consulta. A vantagem é que dessa forma você não realiza uma sub-consulta toda vez que chega na hora de verificar o tipo da conta do cliente, o que no caso de um banco bastante populado pode levar muito tempo. A ordenação do resultado está na última linha. Segue:

--- SETANDO O TIPO DE CONTA PARA UMA VARIÁVEL ---
SET 	@TIPO_CONTA = (SELECT	A.TIPO_CONTA 
					 	 FROM	TAB_CORRENTISTA A,
					 			TAB_CONTA B
		 			 	 WHERE  A.NM_NOME = 'MISAEL PINHEIRO DA SILVA JUNIOR' 
		 			 	 AND	 A.ID_CORRENTISTA = B.ID_CORRENTISTA;)

SELECT		COR.NM_NOME		,
			LGR.ID_CEP		,
			CON.ID_CONTA 	,
			CON.VL_SALDO	,
			TI.NM_TIPO_CONTA,
			LGR.NM_NOME		,
			MUN.NM_MUNICIPIO
FROM 		TAB_CONTA CON 			

INNER JOIN 	TAB_CORRENTISTA COR 	
ON 			CON.ID_CORRENTISTA	=	COR.ID_CORRENTISTA

INNER JOIN 	TAB_MUNICIPIO MUN 		
ON 			COR.ID_MUNICIPIO 	=	MUN.ID_MUNICIPIO

INNER JOIN 	TAB_LOGRADOURO LGR 	
ON 			MUN.ID_MUNICIPIO 	=	LGR.ID_MUNICIPIO

INNER JOIN 	TAB_TIPO_CONTA TI 		
ON 			CON.ID_TIPO_CONTA 	=	@TIPO_CONTA  --- USA O TIPO DE CONTA SETADO AQUI
ORDER BY	COR.NM_NOME DESC;  --- ORDENA PELO NOME 


Espero ter ajudado, até mais!
GOSTEI 0
Ricardo Pestana

Ricardo Pestana

30/11/2018

Bom dia,

Coloca o order by, no final da sentença (após a subquery), conforme abaixo:

order by COR.NM_NOME

abraço,
GOSTEI 0
Julio Cesar

Julio Cesar

30/11/2018

<br />
Ricardo muito obrigado, consegui resolver o exercício.<br />
<br />
Owl, no set @Tipo_de_conta( select A.tipo_de_conta<br />
from Tab_Correntista A<br />
<br />
Acontece que o tipo de conta não está na tabela correntista, eu agradeço a ajuda mas deveria ter encaminhado as tabelas utilizadas e as estruturas da mesmas, eu sou bem iniciante em SQL então infelizmente não consegui "reaproveitar" seu código, fiquei confuso.... mas não se sinta culpado por isso, eu que ainda estou iniciando e não entendo bem.....<br />
Enfim, muito obrigado.<br />
<br />
Owl, caso queira me mandar do jeito que você fez antes, aqui está a resposta que deu certo pra mim, basta mudar para o jeito que você fez antes, abraços, tmj!!!!<br />
<br />
SELECT CR.NM_NOME AS "NOME CLIENTE",
TI.NM_TIPO_CONTA AS "TIPO CONTA",
LOGR.ID_CEP AS "CEP",
CN.ID_CONTA AS CONTA,
CN.VL_SALDO AS SALDO,
LOGR.DS_TIPO AS "TIPO",
LOGR.DS_TITULO AS "TITULO",
LOGR.NM_NOME AS "NOME RUA",
MN.NM_MUNICIPIO AS MUNICIPIO
<br />
FROM TAB_CORRENTISTA CR
JOIN TAB_CONTA CN
ON CR.ID_CORRENTISTA = CN.ID_CORRENTISTA
JOIN TAB_LOGRADOURO LOGR
ON CR.ID_CEP = LOGR.ID_CEP
JOIN TAB_MUNICIPIO MN
ON LOGR.ID_MUNICIPIO = MN.ID_MUNICIPIO
JOIN TAB_TIPO_CONTA TI
ON CN.ID_TIPO_CONTA = TI.ID_TIPO_CONTA
WHERE CN.ID_TIPO_CONTA IN ( SELECT CNN.ID_TIPO_CONTA
FROM TAB_CORRENTISTA CRR
JOIN TAB_CONTA CNN
ON CRR.ID_CORRENTISTA = CNN.ID_CORRENTISTA<br />
WHERE CRR.NM_NOME IN ''MISAEL PINHEIRO DA SILVA JUNIOR''<br />
) <br />
ORDER BY CR.NM_NOME DESC<br />
GOSTEI 0
POSTAR