Jump to content

Recommended Posts

Posted

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

Posted

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

  • Vote 1

Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Posted

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?

Posted

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.