Concatenar na Mesma tabela

13/08/2019

0

Bom dia Pessoal. Eu tenho uma tabela com a seguinte estrutura
tabela carga:
NroAjudante, OrdemCarga, CodFuncionario
1, 223, 123
2, 223, 234
1, 224, 543
1, 225, 789
2, 225, 456

tabela funcionário
CodFuncionario, NomeFuncionario, ....
123, NomeFuncionario123
234, NomeFuncionario234
543 NomeFuncionario543

Gostaria de saber se é possível concatenar o código do funcionário quando a ordem de carga possuir mais de um funcionário e apresentar o resultado da seguinte forma:
OrdemCarga, CodFuncionario
223, NomeFuncionario123 / NomeFuncionario234
224, NomeFuncionario543
225, NomeFuncionario789 / NomeFuncionario456
Rafael Gomes

Rafael Gomes

Responder

Posts

13/08/2019

Hiago

Você quer no caso, "guardar" os códigos dos funcionários que estão "na mesma carga", é isso?
Responder

13/08/2019

Jothaz

Você esta utilizando qual banco de dados?
Responder

13/08/2019

Jothaz

Uma forma de fazer é com apresentado abaixo, mas usa um tabela temporária.

Veja se atende.


create table #carga (NroAjudante int, OrdemCarga int, CodFuncionario int)
create table #funcionario(CodFuncionario int, NomeFuncionario  varchar(50))

insert into #carga values (1, 223, 123)
insert into #carga values (2, 223, 234)
insert into #carga values (1, 224, 543)
insert into #carga values (1, 225, 789)
insert into #carga values (2, 225, 456)

insert into #funcionario values (123, 'NomeFuncionario123')
insert into #funcionario values (234, 'NomeFuncionario234')
insert into #funcionario values (543, 'NomeFuncionario543')
insert into #funcionario values (789, 'NomeFuncionario789')
insert into #funcionario values (456, 'NomeFuncionario456')


Select OrdemCarga, c.CodFuncionario, NomeFuncionario
into #temp
from #carga c
left join #funcionario f on c.CodFuncionario = f.CodFuncionario
order by c.OrdemCarga, c.CodFuncionario


select * from #temp

-- Concatenando
SELECT  OrdemCarga,
	COALESCE(
		(SELECT  CAST(NomeFuncionario AS VARCHAR(20)) + ';' AS [text()]
		 FROM #temp AS O
		 WHERE O.OrdemCarga  = C.OrdemCarga 
		 ORDER BY OrdemCarga
		 FOR XML PATH(''), TYPE).value('.[1]', 'VARCHAR(MAX)'), '') AS Produtos
FROM #temp AS C
GROUP BY OrdemCarga

drop table #carga 
drop table #funcionario
drop table #temp


Resultado:
OrdemCarga  Produtos
----------- -------------------------------------------------------------------------------
223         NomeFuncionario123;NomeFuncionario234;
224         NomeFuncionario543;
225         NomeFuncionario456;NomeFuncionario789;


Responder

13/08/2019

Rafael Gomes

Você quer no caso, "guardar" os códigos dos funcionários que estão "na mesma carga", é isso?

eu preciso de select que me retorne os nomes dos funcionários concatenados quando uma carga possui mais de um funcionário
Responder

13/08/2019

Rafael Gomes

Você esta utilizando qual banco de dados?

oracle
Responder

13/08/2019

Rafael Gomes

pessoal eu consegui com o comando LISTAGG da seguinte forma:

SELECT OrdemCarga, LISTAGG( NomeFuncionario, ' / ')
WITHIN GROUP(ORDER BY OrdemCarga DESC) FROM carga, funcionario
GROUP BY OrdemCarga;

Obrigado a todos pelo auxilio;
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar