Dúvida SQL

Olás,

Tenho uma tabela “Funcionario” e uma tabela “Afastamento”, em uma relação 1:N. Gostaria de selecionar todos os funcionários e concatenar em um campo os motivos de afastamento.

O resultado seria algo mais ou menos assim:

Funcionário… Motivos Afastamento

Ana…Férias, Treinamento
Carla… Falta, Atestado Médico
Maria… Férias

Poderiam me dar um help?

Vlws :wink:

Acho que com SQL você não consegue fazer isso não, cara. Você pode buscar os registros e montar o resto na mão, agora em SQL ele traria a coluna da esquerda repetida, para cada motivo de afastamento do funcionario"SELECT fun.nome, afa.descricao FROM funcionario fun INNER JOIN afastamento afa ON afa.idfuncionario = fun.idfuncionario"

Rodrigo Sasaki

Ops, dá sim… só usar um subselect e depois juntar esses dois campos… ou se pensar da pra usar um Coalesce …

blastec
Cara é o seguinte, vc passou pra gente a situação, mas a gente também não é mago, cadê a estrutura da sua tabela?

É mesmo? e como ficaria isso?

Use como padrão os nomes que eu usei na query, depois o autor altera pra estrutura dele.

Ficaria assim

[code]SELECT
f.nome,
(
SELECT motivo FROM afastamento
WHERE motivo <> null AND id_funcionario = f.id_funcionario
) AS motivo
FROM funcionario f
INNER JOIN Afastamento af
ON af.id_funcionario = f.id_funcionario
WHERE f.id_funcionario = 1

[/code]

charleston10 , da forma que colocou vai dar erro se houver mais de um motivo.

Com sql padrão não dá pra fazer mesmo, mas alguns bancos fornecem alguma forma alternativa.

blastec, que banco está utilizando?

Eu ia dizer exatamente isso hehehe, fiz até um teste aqui e realmente deu erro.

Só reforçando o que o pessoal disse, com SQL puro não dá mesmo. Se o resultado for utilizado em uma aplicação Java, é simples de fazer com código Java. Se for um relatório, dá pra fazer agrupamentos.

Se for Oracle, você pode usar o WM_CONCAT.

O problema acho que não é nem o erro,
o cara passa uma dúvida e não passa a estrutura da tabela dele, eu fiz esse sql pelado sem nada pra imaginar,
… mas enfim

Vamos indo…