Concatenar na Mesma tabela
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
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
Curtidas 0
Respostas
Hiago
13/08/2019
Você quer no caso, "guardar" os códigos dos funcionários que estão "na mesma carga", é isso?
GOSTEI 0
Jothaz
13/08/2019
Você esta utilizando qual banco de dados?
GOSTEI 0
Jothaz
13/08/2019
Uma forma de fazer é com apresentado abaixo, mas usa um tabela temporária.
Veja se atende.
Resultado:
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;
GOSTEI 0
Rafael Gomes
13/08/2019
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
GOSTEI 0
Rafael Gomes
13/08/2019
Você esta utilizando qual banco de dados?
oracle
GOSTEI 0
Rafael Gomes
13/08/2019
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;
SELECT OrdemCarga, LISTAGG( NomeFuncionario, ' / ')
WITHIN GROUP(ORDER BY OrdemCarga DESC) FROM carga, funcionario
GROUP BY OrdemCarga;
Obrigado a todos pelo auxilio;
GOSTEI 0