Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Precisa organizar os nomes dos funcionários de acordo com a coluna da cidade


Infelizmente, o que você está tentando fazer não é possível, pelo menos não em SQL "direto" - você precisaria de SQL dinâmico ou de um processo de duas etapas (na primeira etapa, gerando uma string que é uma nova instrução SQL). Complicado.

O problema é que você não está incluindo uma lista fixa de nomes de cidades (como literais de string). Você está tentando criar colunas com base no que você obtém (selecione a cidade dos funcionários). Assim, o número de colunas e o nome das colunas não são conhecidos até que o mecanismo Oracle leia os dados da tabela, mas antes que o mecanismo seja iniciado, ele já deve saber quais serão todas as colunas. Contradição.

Observe também que, se isso fosse possível, você quase certamente gostaria (selecione distinta cidade dos funcionários).

ADICIONADO:O OP faz uma pergunta de acompanhamento em um comentário (veja abaixo).

O arranjo ideal é que as cidades estejam em sua própria tabela menor, e a "cidade" na tabela de funcionários tenha uma restrição de chave estrangeira para que a coisa "cidade" seja gerenciável. Você não quer que um funcionário de RH entre em Nova York, outro na cidade de Nova York e um terceiro em Nova York para a mesma cidade. De uma forma ou de outra, primeiro tente seu código substituindo a subconsulta que segue o operador IN na cláusula pivô com simplesmente a lista separada por vírgulas de literais de string para as cidades:... IN ('DFW', 'CH', 'NOVA IORQUE'). Observe que a ordem em que você os coloca nesta lista será a ordem das colunas na saída. Não verifiquei toda a consulta para ver se há outros problemas; tente isso e deixe-nos saber o que acontece.

Boa sorte!