Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Tassiana

Concatenação

Recommended Posts

Eu tenho três tabelas:EMPREENDIMENTO, INCORPORADOR, EMPINCORPORADORE faço a seguinte consulta:select E.nome , I.nome from empreendimento E, incorporador I, empincorporador EI where E.id = EI.idempreendimento AND I.id = EI.idincorporador group by E.nome, I.nomeObtenho esses dados:Empreendimento: Incorporador:TESTE Incorporador1TESTE2 Incorporador1TESTE2 Incorporador2TESTE3 Incorporador2TESTE3 Incorporador3Mas gostaria que os empreendimentos aparecessem uma única vez, com seus incorporadores concatenados:Empreendimento: Incorporador:TESTE Incorporador1TESTE2 Incorporador1 / Incorporador2 TESTE3 Incorporador2 / Incorporador3 Como faço isso????Obrigada!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caríssima Tassiana,

 

Pode ser utilizado cursores?

 

Vou montar um exemplo com cursor e postar.

 

 

 

Até breve.

 

 

 

 

Eu tenho três tabelas:

 

EMPREENDIMENTO, INCORPORADOR, EMPINCORPORADOR

 

E faço a seguinte consulta:

 

select

E.nome , I.nome

from

empreendimento E, incorporador I, empincorporador EI

where

E.id = EI.idempreendimento AND I.id = EI.idincorporador group by E.nome, I.nome

 

Obtenho esses dados:

 

Empreendimento: Incorporador:

 

TESTE Incorporador1

TESTE2 Incorporador1

TESTE2 Incorporador2

TESTE3 Incorporador2

TESTE3 Incorporador3

 

Mas gostaria que os empreendimentos aparecessem uma única vez, com seus incorporadores concatenados:

 

Empreendimento: Incorporador:

 

TESTE Incorporador1

TESTE2 Incorporador1 / Incorporador2

TESTE3 Incorporador2 / Incorporador3

 

Como faço isso????

 

Obrigada!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tassiana, jothaz

boas tardes

 

aqui temos um exemplo que creio que possa ajudar:

http://forum.imasters.com.br/index.php?s=&...st&p=756637

 

 

abs

t+

Como sempre rápido e preciso no gatilho! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

 

Vou colocar o exemplo na área de dicas.

 

Pois além de retornar linhas concatenadas tb um bom exemplo do uso de curso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como sempre rápido e preciso no gatilho! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

 

Vou colocar o exemplo na área de dicas.

 

Pois além de retornar linhas concatenadas tb um bom exemplo do uso de curso.

blzera, boa idéia, tb. tinha pensando em postar la na area de dicas, depois esqueci

 

http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Depois crio um post lá na área de dicas.

 

 

Com já tinha feito um exemplo tb resolvi postá-lo pois é basicamente o q faz o http://forum.imasters.com.br/index.php?s=&...st&p=756637 só que criei uma função.

--
--CRIANDO MASSA DE DADOS PARA TESTES
--
CREATE TABLE EMPREENDIMENTO (ID_EMPREENDIMENTO INT, DE_EMPREENDIMENTO VARCHAR(40))
INSERT INTO EMPREENDIMENTO (ID_EMPREENDIMENTO,DE_EMPREENDIMENTO)
VALUES (1,'EMPREENDIMENTO1')
INSERT INTO EMPREENDIMENTO (ID_EMPREENDIMENTO,DE_EMPREENDIMENTO)
VALUES (2,'EMPREENDIMENTO2')
INSERT INTO EMPREENDIMENTO (ID_EMPREENDIMENTO,DE_EMPREENDIMENTO)
VALUES (3,'EMPREENDIMENTO3')

CREATE TABLE INCORPORADOR (ID_INCORPORADOR INT, DE_INCORPORADOR VARCHAR(40))
INSERT INTO INCORPORADOR (ID_INCORPORADOR,DE_INCORPORADOR)
VALUES (1,'INCORPORADOR1')
INSERT INTO INCORPORADOR (ID_INCORPORADOR,DE_INCORPORADOR)
VALUES (2,'INCORPORADOR2')
INSERT INTO INCORPORADOR (ID_INCORPORADOR,DE_INCORPORADOR)
VALUES (3,'INCORPORADOR3')
INSERT INTO INCORPORADOR (ID_INCORPORADOR,DE_INCORPORADOR)
VALUES (4,'INCORPORADOR4')

CREATE TABLE EMPINCORPORADOR (ID_EMPREENDIMENTO INT, ID_INCORPORADOR INT)

INSERT INTO EMPINCORPORADOR (ID_EMPREENDIMENTO,ID_INCORPORADOR)
VALUES (1,1)
INSERT INTO EMPINCORPORADOR (ID_EMPREENDIMENTO,ID_INCORPORADOR)
VALUES (1,2)
INSERT INTO EMPINCORPORADOR (ID_EMPREENDIMENTO,ID_INCORPORADOR)
VALUES (1,3)
INSERT INTO EMPINCORPORADOR (ID_EMPREENDIMENTO,ID_INCORPORADOR)
VALUES (2,3)
INSERT INTO EMPINCORPORADOR (ID_EMPREENDIMENTO,ID_INCORPORADOR)
VALUES (2,4)
INSERT INTO EMPINCORPORADOR (ID_EMPREENDIMENTO,ID_INCORPORADOR)
VALUES (3,4)

--
--EXECUTANDO SELECT E UTILIZANDO A FUNÇÃO CRIADA DBO.CONCATENAR_VALOR
--
SELECT DISTINCT E.DE_EMPREENDIMENTO , DBO.CONCATENAR_VALOR(EI.ID_EMPREENDIMENTO) 
FROM EMPINCORPORADOR EI, EMPREENDIMENTO E
WHERE EI.ID_EMPREENDIMENTO = E.ID_EMPREENDIMENTO 

--
-- EXCLUI TABELA CRIADAS --
DROP TABLE EMPREENDIMENTO 
DROP TABLE INCORPORADOR 
DROP TABLE EMPINCORPORADOR

 

Código da função:

CREATE  FUNCTION CONCATENAR_VALOR(@ID_EMPREENDIMENTO INT)
RETURNS  VARCHAR(400) AS BEGIN DECLARE @DE_EMPREENDIMENTO VARCHAR(50),
   	    @DE_INCORPORADOR VARCHAR(50),
		@TEXTO VARCHAR(400)

DECLARE MYCURSOR CURSOR FOR 
SELECT  I.DE_INCORPORADOR
FROM EMPINCORPORADOR EI, INCORPORADOR I
WHERE EI.ID_INCORPORADOR 		= I.ID_INCORPORADOR AND EI.ID_EMPREENDIMENTO 	= @ID_EMPREENDIMENTO

OPEN MYCURSOR
FETCH NEXT FROM MYCURSOR INTO @DE_INCORPORADOR
SET @TEXTO = '' 

WHILE @@FETCH_STATUS = 0
BEGIN IF @TEXTO = '' 
		SET @TEXTO  =  rtrim(ltrim(@DE_INCORPORADOR))	
	ELSE
		SET @TEXTO  = ISNULL(@TEXTO,'')  +   ' / '  + rtrim(ltrim(@DE_INCORPORADOR))	

	FETCH NEXT FROM MYCURSOR INTO @DE_INCORPORADOR
END

CLOSE MYCURSOR
DEALLOCATE MYCURSOR

RETURN @TEXTO
END

 

 

Bom acho que vale pela curiosidade. E normalmente os DBA´s não são a favor de select´s em funções então nem sei se é a melhor solução. Só o pelo de execução poderá determinar qual a melhor solução.

 

Notem que as tabela não são temporárias pois senão poderia referncia-las na função. Mas no final query todas as tabelas são dropada.

 

Basta copiar os exemplos para o QA e executar.

 

t+

 

 

Como sempre rápido e preciso no gatilho! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

 

Vou colocar o exemplo na área de dicas.

 

Pois além de retornar linhas concatenadas tb um bom exemplo do uso de curso.

blzera, boa idéia, tb. tinha pensando em postar la na area de dicas, depois esqueci

 

http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.