Ir para conteúdo

POWERED BY:

Arquivado

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

Virgil Almeida

Select de multiplos registros em uma unica celula

Recommended Posts

Fala ae pessoal tudo bem?Sou novo aqui, apesar de sempre consultar as dicas disponibilizadas por vocês, porem hj nao encontrei nada parecido com oque estou precisando.Tenho um banco modelado da seguinte formauma tabela PRODUTOS com dois campos ID_PRODUTO e NOM_PRODUTO contendo as seguintes informações

ID_PRODUTO NOM_PRODUTO1                   PRODUTO 12                   PRODUTO 2

uma tabela FORNECEDOR com dois campos ID_FORNECEDOR e NOM_FORNECEDOR contendo as seguintes informações

ID_FORNECEDOR NOM_FORNECEDOR1                        FORNECEDOR 12                        FORNECEDOR 2

uma tabela representando o relacionamento N pra N entre as duas tabelas acima, esta é a PRO_FOR com dois campos ID_PRODUTO e ID_FORNECEDOR contendo as seguintes informações

ID_PRODUTO ID_FORNECEDOR 1                               12                               11                               22                               2

Agora começa o meu problema, preciso de uma consulta que retorne as informações da seguinte forma.

NOM_PRODUTO    NOM_FORNECEDORPRODUTO 1          FORNECEDOR 1,FORNECEDOR 2PRODUTO 2          FORNECEDOR 1,FORNECEDOR 2

aguardo a ajuda de você.

Compartilhar este post


Link para o post
Compartilhar em outros sites

uma forma de fazer isso é usando cursor e tabela temporaria

 

faz um cursor para os produtos que tu quer fazer a busca e um cursor para os fornecedores pertencentes aos produtos e vai contacatenando os fornecedores numa variavel, dai tu joga o resultado da variavel concatenada numa tabela virtual

 

vai ficar +ou- assim:

set nocount on--tabelas para testescreate table produto (ID_PRODUTO int, NOM_PRODUTO varchar(50))insert into produto (ID_PRODUTO, NOM_PRODUTO ) values (1, 'PRODUTO 1')insert into produto (ID_PRODUTO, NOM_PRODUTO ) values (2, 'PRODUTO 2')create table fornecedor(ID_FORNECEDOR int, NOM_FORNECEDOR varchar(50))insert into fornecedor (ID_FORNECEDOR, NOM_FORNECEDOR ) values (1, 'FORNECEDOR 1')insert into fornecedor (ID_FORNECEDOR, NOM_FORNECEDOR ) values (2, 'FORNECEDOR 2')create table forn_prod (ID_PRODUTO int, ID_FORNECEDOR int)insert into forn_prod (ID_PRODUTO, ID_FORNECEDOR ) values (1, 1)insert into forn_prod (ID_PRODUTO, ID_FORNECEDOR ) values (2, 1)insert into forn_prod (ID_PRODUTO, ID_FORNECEDOR ) values (1, 2)insert into forn_prod (ID_PRODUTO, ID_FORNECEDOR ) values (2, 2)--tabela temporariacreate table #temp (NOM_PRODUTO varchar(50), NOM_FORNECEDOR varchar(4000))--select distinct para buscar somente produtos que estejam na tabela forn_prod--cursor x: produtosdeclare x cursor for select distinct forn_prod.ID_PRODUTO, NOM_PRODUTO from forn_prod 			inner join produto on produto.ID_PRODUTO = forn_prod.ID_PRODUTO--variaveis para o cursor xdeclare @ID_PRODUTO int declare @NOM_PRODUTO varchar(50) --variável para concatenar o nome dos fornecedoresdeclare @NOM_FORNECEDOR_conc varchar(8000) open x fetch next from x into @ID_PRODUTO,@NOM_PRODUTO while @@fetch_Status=0 begin 	--zerando variável de concatenação	set @NOM_FORNECEDOR_conc = ''	--cursor y: fornecedores relacionados com os produtos, vai concatenar os fornecedores na variável @NOM_FORNECEDOR_conc	declare y cursor for select NOM_FORNECEDOR from fornecedor 				inner join forn_prod on forn_prod.ID_FORNECEDOR = fornecedor.ID_FORNECEDOR				where forn_prod.ID_PRODUTO = @ID_PRODUTO	--variavel para o cursor y	declare @NOM_FORNECEDOR varchar(50) 	open y 	fetch next from y into @NOM_FORNECEDOR 	while @@fetch_Status=0 	begin		--concatenando fornecedores na variável @NOM_FORNECEDOR_conc		set @NOM_FORNECEDOR_conc = @NOM_FORNECEDOR_conc + @NOM_FORNECEDOR + ', '		--loop do cursor y		fetch next from y into @NOM_FORNECEDOR	end 	--fim do cursor y	close y 	deallocate y  	--retira última virgula	set @NOM_FORNECEDOR_conc = substring(@NOM_FORNECEDOR_conc, 1, len(@NOM_FORNECEDOR_conc)-1)	--insere na tabela virtual	insert into #temp (NOM_PRODUTO, NOM_FORNECEDOR )	values (@NOM_PRODUTO, @NOM_FORNECEDOR_conc)	--loop do cursor x	fetch next from x into @ID_PRODUTO,@NOM_PRODUTO end --fim do cursor xclose x deallocate x --consulta da tabela temporariaselect * from #temp--apagando tabela temporariadrop table #temp--apagando tabelas para testesdrop table produto drop table fornecedor drop table forn_prod

t++

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.