Olá, Obrigado pela resposta!
Esta empreitada está encantada! Acho que acabei de encontrar um bug no openofffice do debian: não é possível editar as consultas em uma máquina powerpc que eu tenho com debian (numa 386, vai tudo bem), o openoffice simplesmente fecha e diz que não é possível. Em Thu, 27 May 2010 15:10:01 -0700 (PDT), Osvaldo Kussama <[email protected]> escreveu: > > --- Em qui, 27/5/10, Gunther Furtado <[email protected]> escreveu: > [...] > > > Caro Gunther; > > Desconsiderando qualquer aspecto referente ao projeto do banco de > dados (caso seja de seu interesse poderemos voltar a este ponto) Sim, tenho interesse, mas acho meio offtopic, se puder enviar alguma indicação de leitura, tá valendo. > considerarei, pelo que depreendi de sua explicação, que você > construiu as seguintes tabelas: > > Para cada setor (Primário, Secundário, Terciário) uma tabela para > cada ano (2003 a 2009) - total de 21 tabelas - e cada uma destas > tabelas possui os atributos (município, ord, valor, e possíveis > outros atributos). Para cada município existem diversas linhas com > diferentes ord e valor e o que se deseja é a quantidade de linhas e > valor total de cada município. > Descrição perfeita! > A sentença SQL: > SELECT municipio, count(ord), sum(valor) FROM tab_prim_2003 GROUP BY > municipio ORDER BY municipio; fornecerá para cada município a > quantidade e o valor total para o setor primário no exercício 2003. > Até aqui deu certo, mas estas são as que eu já tinha conseguido fazer do seguinte modo: SELECT "Município", MAX( "Quantidade" ) AS "Quantidade", MAX ( "Valor" ) AS "Valor" FROM "2003S2" AS "2003S2" GROUP BY "Município" HAVING ( ( "Município" = 'municipio 1' ) OR ( "Município" = 'municipio 2' ) OR ( "Município" = 'municipio 3' ) ) ORDER BY "Município" ASC > Para obter todos os exercícios podemos usar uma junção: > SELECT p03.municipio, count(p03.ord) AS n_prim_2003, sum(p03.valor) > AS val_prim_2003, count(p04.ord) AS n_prim_2004, sum(p04.valor) AS > val_prim_2004, count(p05.ord) AS n_prim_2005, sum(p05.valor) AS > val_prim_2005, count(p06.ord) AS n_prim_2006, sum(p06.valor) AS > val_prim_2006, count(p07.ord) AS n_prim_2007, sum(p07.valor) AS > val_prim_2007, count(p08.ord) AS n_prim_2008, sum(p08.valor) AS > val_prim_2008, count(p09.ord) AS n_prim_2009, sum(p09.valor) AS > val_prim_2009 FROM tab_prim_2003 p03 JOIN tab_prim_2004 p04 ON > p03.municipio = p04.municipio JOIN tab_prim_2005 p05 ON p03.municipio > = p05.municipio JOIN tab_prim_2006 p06 ON p03.municipio = > p06.municipio JOIN tab_prim_2007 p07 ON p03.municipio = p07.municipio > JOIN tab_prim_2008 p08 ON p03.municipio = > p08.municipio JOIN tab_prim_2009 p09 ON p03.municipio = p09.municipio > GROUP BY municipio ORDER BY municipio; Aqui, o programa acusou erro de sintaxe, vou testar novemente hoje e retorno com novidades. Só uma questão: este operando [tab_prim_2003] vem predefinido? Pergunto por que minha primeira coluna é o ID dos registros, isto interfere em algo? > > Idem para os setores Secundário e Terciário. > > Para obter a tabela desejada faça a união das 3 consultas: > SELECT p03.municipio, 'Primário' AS setor, > count(p03.ord) AS n_pri_2003, sum(p03.valor) AS > val_pri_2003, ... > count(p09.ord) AS n_pri_2009, sum(p09.valor) AS > val_pri_2009 FROM tab_pri_2003 p03 JOIN tab_prim_2004 p04 ON > p03.municipio = p04.municipio ... > JOIN tab_prim_2009 p09 ON p03.municipio = > p09.municipio GROUP BY p03.municipio > UNION ALL > SELECT s03.municipio, 'Secundário' AS setor, > count(s03.ord) AS n_sec_2003, sum(s03.valor) AS > val_sec_2003, ... > count(s09.ord) AS n_sec_2009, sum(s09.valor) AS > val_sec_2009 FROM tab_sec_2003 s03 JOIN tab_sec_2004 s04 ON > s03.municipio = s04.municipio ... > JOIN tab_sec_2009 p09 ON s03.municipio = > s09.municipio GROUP BY s03.municipio > UNION ALL > SELECT t03.municipio, 'Terciário' AS setor, > count(t03.ord) AS n_ter_2003, sum(t03.valor) AS > val_ter_2003, ... > count(t09.ord) AS n_ter_2009, sum(t09.valor) AS > val_ter_2009 FROM tab_ter_2003 t03 JOIN tab_ter_2004 t04 ON > t03.municipio = t04.municipio ... > JOIN tab_ter_2009 t09 ON t03.municipio = > t09.municipio GROUP BY municipio > ORDER BY municipio, setor; > Ainda não consegui testar, retorno assim que possível. > A ideia é essa. Como não testei pode haver algum erro de digitação. > > Osvaldo > > > Obrigado novamente, -- "...agora, só nos sobrou o futuro...", visto em www.manuchao.net Gunther Furtado Curitiba - Paraná - Brasil [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
