rcrd18 Posted February 13, 2014 at 10:10 PM Report #545211 Posted February 13, 2014 at 10:10 PM Boa noite, estão a ter dificuldades no seguinte: tenho uma tabela instituições, uma tabela pedidos, uma tabela armazem_zona. O que pretendo é criar uma view que dê para ver o número de pedidos de uma determinada instituição. create view Pedidos_feitos as select pedidos.cod_instituicao, instituicoes.nome_inst, pedidos.cod_armazem_zona, (select sum(n_pedido) from pedidos where pedidos.cod_instituicao = instituicoes.cod_instituicao) from instituicoes inner join armazem_zona on armazem_zona.cod_instituicao = pedidos.cod_instituicao inner join armazem_zona on armazem_zona.cod_armazem_zona = instituicoes.cod_armazem_zona where pedidos.n_pedido != 0 group by cod_instituicao; Fica com o risco amarelo embaixo da linha do select e diz que "SELECT list inconsisten with group by;" e que pedidos.cod_instituicao é um 'invalid identifier? O que é que estou a fazer mal aqui? Obrigado
Rechousa Posted February 13, 2014 at 10:48 PM Report #545212 Posted February 13, 2014 at 10:48 PM Olá, Parece-me que tens vários problemas: a) Estás a referenciar a tabela pedidos (pedidos.cod_instituicao) e não a estás a usar (não está no from nem nos joins); b) Os grupos servem para agrupar determinadas colunas e deixar outras livras para operações matemáticas. Estás a agrupar por cod_instituicao quando deverias de agrupar por cod_instituicao, nome_inst e cod_armazem_zona c) Estás a fazer uma subquery quando o que se calhar pretendes é fazer somas. d) É mesmo um SUM que pretendes? Não é contar o número de pedidos por instituição / etc.? Vê se assim é isto o que precisas: create view Pedidos_feitos as select pedidos.cod_instituicao, instituicoes.nome_inst, pedidos.cod_armazem_zona, count(n_pedido) as num_pedidos from instituicoes inner join pedidos on pedidos.cod_instituicao = instituicoes.cod_instituicao inner join armazem_zona on armazem_zona.cod_instituicao = pedidos.cod_instituicao inner join armazem_zona on armazem_zona.cod_armazem_zona = instituicoes.cod_armazem_zona where pedidos.n_pedido != 0 group by pedidos.cod_instituicao, instituicoes.nome_inst, pedidos.cod_armazem_zona; Espero ter ajudado 1 Report Pedro Martins Sharing is Knowledge! http://www.linkedin.com/in/rechousa
rcrd18 Posted February 13, 2014 at 11:47 PM Author Report #545218 Posted February 13, 2014 at 11:47 PM Obrigado por responder! 🙂 Alterei o código para o seguinte: CREATE VIEW Pedidos_feitos AS SELECT pedidos.cod_instituicao, instituicoes.nome_inst, armazem_zona.cod_armazem_zona, COUNT(n_pedido) AS num_pedidos FROM pedidos, instituicoes, armazem_zona INNER JOIN pedidos ON pedidos.cod_instituicao = instituicoes.cod_instituicao INNER JOIN instituicoes ON instituicoes.cod_armazem_zona = armazem_zona.cod_armazem_zona WHERE pedidos.n_pedido != 0 GROUP BY pedidos.cod_instituicao, instituicoes.nome_inst, armazem_zona.cod_armazem_zona; mas está a dar-me erro: Error report - SQL Error: ORA-00904: "INSTITUICOES"."COD_INSTITUICAO": invalid identifier 00904. 00000 - "%s: invalid identifier" Como é que resolvo este problema?
rcrd18 Posted February 14, 2014 at 09:55 AM Author Report #545237 Posted February 14, 2014 at 09:55 AM Problema resolvido! Obrigado! 🙂 Ficou assim: create view Pedidos_feitos as select pedidos.cod_instituicao, instituicoes.nome_inst, armazem_zona.cod_armazem_zona, count(n_pedido) as total_pedidos from pedidos, instituicoes, armazem_zona where pedidos.cod_instituicao = instituicoes.cod_instituicao and instituicoes.cod_armazem_zona = armazem_zona.cod_armazem_zona and pedidos.n_pedido != 0 group by pedidos.cod_instituicao, instituicoes.nome_inst, armazem_zona.cod_armazem_zona; Cumps
Rui Carlos Posted February 18, 2014 at 12:36 AM Report #545633 Posted February 18, 2014 at 12:36 AM Já agora, é capaz de ser boa ideia estudares a diferença entre cross join e inner join. Rui Carlos Gonçalves
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now