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]

Responder a