Fórum seleção complicada #53324

13/10/2005

0

Prezados Sr´s(as),

possuo a tabela pulverização com a seguinte estrutrura:

codigo,
propriedade rural,
operacao,
safra,
produto1,
quant1,
unidade1,
produto2,
quant2,
unidade2,
produto3,
quant3,
unidade3,
produto4,
quant4,
unidade4,
produto5,
quant5,
unidade5,
produto6,
quant6,
unidade6

onde eu gostaria de selecionar o nome do produto e sua quantidade, agupando tudo isto caso o mesmo se repita em outras pulverizações, observando q os produtos podem estar em ordem diferenciada, ou seja, posso ter o produto ´teste´ alocado no campo produto 1 numa pulverização e o mesmo produto alocado no campo produto3 numa outra pulverização....quando estava desenhando essa tabela pensei num mestre-detalhe, mas como o engenheiro me disse q o nro. de produtos utilizados seriam
06 eu os fixei na tabela, hoje acredito q foi um erro, mas ??....um exemplo de como ficariam dos dados:

pulverizaçao propriedade rural produto 1 quant1 unidade1 produto2 quant2 unidade2 ............
01 primavera 20-00-20 2 Ton. silwet 1 LT.
02 primavera silwet 3 LT. 20-00-20 5 Ton.

o select me devolveria

produto quant unidade

20-0020 7 Ton.
silwet 4 LT.

--
Att, Maiki Perin.
Codificando-Soluções em Tecnologia
www.codificando.com.br
Analista/Programador


Maikiperin

Maikiperin

Responder

Posts

13/10/2005

Afarias

eu diria q vc deveria rever seu projeto para algo como:


TabelaMestre
---------------------
codigo,
propriedade rural,
operacao,
safra


TabelaDetalhe
---------------------
codigoMestre,
produto,
quant,
unidade,
ordem


T+


Responder

Gostei + 0

13/10/2005

Maikiperin

salve afarias,

concordo com vc, essa estrutura é oq realmente funcionaria, mas contudo.....teria como desenhar um [i:b7c79ad426]select[/i:b7c79ad426] onde eu efetuar a seleção desejada ??

obs.: pretendo efetuar essa mudança na próxima revisão....mas por enquanto preciso dessa solução !!

Att, Maiki P.


Responder

Gostei + 0

13/10/2005

Afarias

A melhor opção (talves única) é um procedimento. Uma das forma é para cada produto somar os ítens para cada 1 dos 6 campos, exemplo:


for select codigo, unidade from produtos 
  into :produto :unidade do
begin

  select sum(qtd1) from tabela 
  where produto1=:produto into :v1;

  { ...repete para todos... }

  select sum(qtd6) from tabela 
  where produto6=:produto into :v6;

  quant = v1+v2+v3+v4+v5+v6;

  suspend;

end


por não seguir um projeto relacional vc deve pagar com perda performance e flexibilidade. Até a próxima versão ;-)


T+


Responder

Gostei + 0

18/10/2005

Emerson Nascimento

tente assim e veja se a performance é satisfatória:

eu criei a segunte stored procedure:
CREATE PROCEDURE CONSUMO (
    PROPRIEDADE INTEGER,
    SAFRA CHAR(5))
RETURNS (
    ID INTEGER,
    PRODUTO VARCHAR(60),
    UN VARCHAR(20),
    QUANTIDADE NUMERIC(9,2),
    QUANTIDADEHA NUMERIC(9,2),
    VD INTEGER,
    TANQUE INTEGER,
    FAZENDA INTEGER,
    SAFRASAIDA CHAR(5))
AS
DECLARE VARIABLE ID_PULVERIZACAO INTEGER;
DECLARE VARIABLE PROD1_PULVERIZACAO VARCHAR(60);
DECLARE VARIABLE PROD2_PULVERIZACAO VARCHAR(60);
DECLARE VARIABLE PROD3_PULVERIZACAO VARCHAR(60);
DECLARE VARIABLE PROD4_PULVERIZACAO VARCHAR(60);
DECLARE VARIABLE PROD5_PULVERIZACAO VARCHAR(60);
DECLARE VARIABLE PROD6_PULVERIZACAO VARCHAR(60);
DECLARE VARIABLE PROD7_PULVERIZACAO VARCHAR(60);
DECLARE VARIABLE PROD8_PULVERIZACAO VARCHAR(60);
DECLARE VARIABLE QUANT1_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT2_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT3_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT4_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT5_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT6_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT7_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT8_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE UNID1_PULVERIZACAO VARCHAR(20);
DECLARE VARIABLE UNID2_PULVERIZACAO VARCHAR(20);
DECLARE VARIABLE UNID3_PULVERIZACAO VARCHAR(20);
DECLARE VARIABLE UNID4_PULVERIZACAO VARCHAR(20);
DECLARE VARIABLE UNID5_PULVERIZACAO VARCHAR(20);
DECLARE VARIABLE UNID6_PULVERIZACAO VARCHAR(20);
DECLARE VARIABLE UNID7_PULVERIZACAO VARCHAR(20);
DECLARE VARIABLE UNID8_PULVERIZACAO VARCHAR(20);
DECLARE VARIABLE QUANT1HA_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT2HA_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT3HA_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT4HA_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT5HA_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT6HA_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT7HA_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT8HA_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE VD_PULVERIZACAO INTEGER;
DECLARE VARIABLE TANQUE_PULVERIZACAO INTEGER;
begin
  for select ID_PULVERIZACAO,
             PROD1_PULVERIZACAO, PROD2_PULVERIZACAO, PROD3_PULVERIZACAO, PROD4_PULVERIZACAO,
             PROD5_PULVERIZACAO, PROD6_PULVERIZACAO, PROD7_PULVERIZACAO, PROD8_PULVERIZACAO,
             QUANT1_PULVERIZACAO, QUANT2_PULVERIZACAO, QUANT3_PULVERIZACAO, QUANT4_PULVERIZACAO,
             QUANT5_PULVERIZACAO, QUANT6_PULVERIZACAO, QUANT7_PULVERIZACAO, QUANT8_PULVERIZACAO,
             UNID1_PULVERIZACAO, UNID2_PULVERIZACAO, UNID3_PULVERIZACAO, UNID4_PULVERIZACAO,
             UNID5_PULVERIZACAO, UNID6_PULVERIZACAO, UNID7_PULVERIZACAO, UNID8_PULVERIZACAO,
             QUANT1HA_PULVERIZACAO, QUANT2HA_PULVERIZACAO, QUANT3HA_PULVERIZACAO, QUANT4HA_PULVERIZACAO,
             QUANT5HA_PULVERIZACAO, QUANT6HA_PULVERIZACAO, QUANT7HA_PULVERIZACAO, QUANT8HA_PULVERIZACAO,
             VD_PULVERIZACAO,
             TANQUE_PULVERIZACAO
      from pulverizacao
      where ID_FAZENDA = :propriedade and SAFRA_PULVERIZACAO = :safra
  into :ID_PULVERIZACAO,
       :PROD1_PULVERIZACAO, :PROD2_PULVERIZACAO, :PROD3_PULVERIZACAO, :PROD4_PULVERIZACAO,
       :PROD5_PULVERIZACAO, :PROD6_PULVERIZACAO, :PROD7_PULVERIZACAO, :PROD8_PULVERIZACAO,
       :QUANT1_PULVERIZACAO, :QUANT2_PULVERIZACAO, :QUANT3_PULVERIZACAO, :QUANT4_PULVERIZACAO,
       :QUANT5_PULVERIZACAO, :QUANT6_PULVERIZACAO, :QUANT7_PULVERIZACAO, :QUANT8_PULVERIZACAO,
       :UNID1_PULVERIZACAO, :UNID2_PULVERIZACAO, :UNID3_PULVERIZACAO, :UNID4_PULVERIZACAO,
       :UNID5_PULVERIZACAO, :UNID6_PULVERIZACAO, :UNID7_PULVERIZACAO, :UNID8_PULVERIZACAO,
       :QUANT1HA_PULVERIZACAO, :QUANT2HA_PULVERIZACAO, :QUANT3HA_PULVERIZACAO, :QUANT4HA_PULVERIZACAO,
       :QUANT5HA_PULVERIZACAO, :QUANT6HA_PULVERIZACAO, :QUANT7HA_PULVERIZACAO, :QUANT8HA_PULVERIZACAO,
       :VD_PULVERIZACAO,
       :TANQUE_PULVERIZACAO
  do
  begin
    ID = :id_pulverizacao;
    PRODUTO = :prod1_pulverizacao;
    UN = :unid1_pulverizacao;
    QUANTIDADE = :quant1_pulverizacao;
    QUANTIDADEHA = :quant1ha_pulverizacao;
    VD = :vd_pulverizacao;
    TANQUE = :tanque_pulverizacao;
    FAZENDA = :propriedade;
    SAFRASAIDA = :safra;
    suspend;

    ID = :id_pulverizacao;
    PRODUTO = :prod2_pulverizacao;
    UN = :unid2_pulverizacao;
    QUANTIDADE = :quant2_pulverizacao;
    QUANTIDADEHA = :quant2ha_pulverizacao;
    VD = :vd_pulverizacao;
    TANQUE = :tanque_pulverizacao;
    FAZENDA = :propriedade;
    SAFRASAIDA = :safra;
    suspend;

    ID = :id_pulverizacao;
    PRODUTO = :prod3_pulverizacao;
    UN = :unid3_pulverizacao;
    QUANTIDADE = :quant3_pulverizacao;
    QUANTIDADEHA = :quant3ha_pulverizacao;
    VD = :vd_pulverizacao;
    TANQUE = :tanque_pulverizacao;
    FAZENDA = :propriedade;
    SAFRASAIDA = :safra;
    suspend;

    ID = :id_pulverizacao;
    PRODUTO = :prod4_pulverizacao;
    UN = :unid4_pulverizacao;
    QUANTIDADE = :quant4_pulverizacao;
    QUANTIDADEHA = :quant4ha_pulverizacao;
    VD = :vd_pulverizacao;
    TANQUE = :tanque_pulverizacao;
    FAZENDA = :propriedade;
    SAFRASAIDA = :safra;
    suspend;

    ID = :id_pulverizacao;
    PRODUTO = :prod5_pulverizacao;
    UN = :unid5_pulverizacao;
    QUANTIDADE = :quant5_pulverizacao;
    QUANTIDADEHA = :quant5ha_pulverizacao;
    VD = :vd_pulverizacao;
    TANQUE = :tanque_pulverizacao;
    FAZENDA = :propriedade;
    SAFRASAIDA = :safra;
    suspend;

    ID = :id_pulverizacao;
    PRODUTO = :prod6_pulverizacao;
    UN = :unid6_pulverizacao;
    QUANTIDADE = :quant6_pulverizacao;
    QUANTIDADEHA = :quant6ha_pulverizacao;
    VD = :vd_pulverizacao;
    TANQUE = :tanque_pulverizacao;
    FAZENDA = :propriedade;
    SAFRASAIDA = :safra;
    suspend;

    ID = :id_pulverizacao;
    PRODUTO = :prod7_pulverizacao;
    UN = :unid7_pulverizacao;
    QUANTIDADE = :quant7_pulverizacao;
    QUANTIDADEHA = :quant7ha_pulverizacao;
    VD = :vd_pulverizacao;
    TANQUE = :tanque_pulverizacao;
    FAZENDA = :propriedade;
    SAFRASAIDA = :safra;
    suspend;

    ID = :id_pulverizacao;
    PRODUTO = :prod8_pulverizacao;
    UN = :unid8_pulverizacao;
    QUANTIDADE = :quant8_pulverizacao;
    QUANTIDADEHA = :quant8ha_pulverizacao;
    VD = :vd_pulverizacao;
    TANQUE = :tanque_pulverizacao;
    FAZENDA = :propriedade;
    SAFRASAIDA = :safra;
    suspend;
  end
end


que deverá ser usada da seguinte forma:
select
  produto,
  un,
  sum(quantidade) quantidade,
  sum(quantidadeha) quantidadeha,
  vd,
  tanque,
  fazenda,
  safrasaida
from
  teste(26,´04/05´)  <-- onde 26 é a fazenda e ´04/05´ a safra
where
  coalesce(produto,´´) <> ´´
group by
  produto,
  un,
  vd,
  tanque,
  fazenda,
  safrasaida


bom, espero que seja isso.


Responder

Gostei + 0

18/10/2005

Emerson Nascimento

ou melhor:

CREATE PROCEDURE TESTE (
    PROPRIEDADE INTEGER,
    SAFRA CHAR(5))
RETURNS (
    ID INTEGER,
    PRODUTO VARCHAR(60),
    UN VARCHAR(20),
    QUANTIDADE NUMERIC(9,2),
    QUANTIDADEHA NUMERIC(9,2),
    VD INTEGER,
    TANQUE INTEGER,
    FAZENDA INTEGER,
    SAFRASAIDA CHAR(5))
AS
DECLARE VARIABLE ID_PULVERIZACAO INTEGER;
DECLARE VARIABLE PROD1_PULVERIZACAO VARCHAR(60);
DECLARE VARIABLE PROD2_PULVERIZACAO VARCHAR(60);
DECLARE VARIABLE PROD3_PULVERIZACAO VARCHAR(60);
DECLARE VARIABLE PROD4_PULVERIZACAO VARCHAR(60);
DECLARE VARIABLE PROD5_PULVERIZACAO VARCHAR(60);
DECLARE VARIABLE PROD6_PULVERIZACAO VARCHAR(60);
DECLARE VARIABLE PROD7_PULVERIZACAO VARCHAR(60);
DECLARE VARIABLE PROD8_PULVERIZACAO VARCHAR(60);
DECLARE VARIABLE QUANT1_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT2_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT3_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT4_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT5_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT6_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT7_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT8_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE UNID1_PULVERIZACAO VARCHAR(20);
DECLARE VARIABLE UNID2_PULVERIZACAO VARCHAR(20);
DECLARE VARIABLE UNID3_PULVERIZACAO VARCHAR(20);
DECLARE VARIABLE UNID4_PULVERIZACAO VARCHAR(20);
DECLARE VARIABLE UNID5_PULVERIZACAO VARCHAR(20);
DECLARE VARIABLE UNID6_PULVERIZACAO VARCHAR(20);
DECLARE VARIABLE UNID7_PULVERIZACAO VARCHAR(20);
DECLARE VARIABLE UNID8_PULVERIZACAO VARCHAR(20);
DECLARE VARIABLE QUANT1HA_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT2HA_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT3HA_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT4HA_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT5HA_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT6HA_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT7HA_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE QUANT8HA_PULVERIZACAO NUMERIC(9,2);
DECLARE VARIABLE VD_PULVERIZACAO INTEGER;
DECLARE VARIABLE TANQUE_PULVERIZACAO INTEGER;
begin
  for select ID_PULVERIZACAO,
             PROD1_PULVERIZACAO, PROD2_PULVERIZACAO, PROD3_PULVERIZACAO,
             PROD4_PULVERIZACAO, PROD5_PULVERIZACAO, PROD6_PULVERIZACAO,
             PROD7_PULVERIZACAO, PROD8_PULVERIZACAO,
             QUANT1_PULVERIZACAO, QUANT2_PULVERIZACAO, QUANT3_PULVERIZACAO,
             QUANT4_PULVERIZACAO, QUANT5_PULVERIZACAO, QUANT6_PULVERIZACAO,
             QUANT7_PULVERIZACAO, QUANT8_PULVERIZACAO,
             UNID1_PULVERIZACAO, UNID2_PULVERIZACAO, UNID3_PULVERIZACAO,
             UNID4_PULVERIZACAO, UNID5_PULVERIZACAO, UNID6_PULVERIZACAO,
             UNID7_PULVERIZACAO, UNID8_PULVERIZACAO,
             QUANT1HA_PULVERIZACAO, QUANT2HA_PULVERIZACAO, QUANT3HA_PULVERIZACAO,
             QUANT4HA_PULVERIZACAO, QUANT5HA_PULVERIZACAO, QUANT6HA_PULVERIZACAO,
             QUANT7HA_PULVERIZACAO, QUANT8HA_PULVERIZACAO,
             VD_PULVERIZACAO,
             TANQUE_PULVERIZACAO
      from pulverizacao
      where ID_FAZENDA = :propriedade and SAFRA_PULVERIZACAO = :safra
  into :ID_PULVERIZACAO,
       :PROD1_PULVERIZACAO, :PROD2_PULVERIZACAO, :PROD3_PULVERIZACAO,
       :PROD4_PULVERIZACAO, :PROD5_PULVERIZACAO, :PROD6_PULVERIZACAO,
       :PROD7_PULVERIZACAO, :PROD8_PULVERIZACAO,
       :QUANT1_PULVERIZACAO, :QUANT2_PULVERIZACAO, :QUANT3_PULVERIZACAO,
       :QUANT4_PULVERIZACAO, :QUANT5_PULVERIZACAO, :QUANT6_PULVERIZACAO,
       :QUANT7_PULVERIZACAO, :QUANT8_PULVERIZACAO,
       :UNID1_PULVERIZACAO, :UNID2_PULVERIZACAO, :UNID3_PULVERIZACAO,
       :UNID4_PULVERIZACAO, :UNID5_PULVERIZACAO, :UNID6_PULVERIZACAO,
       :UNID7_PULVERIZACAO, :UNID8_PULVERIZACAO,
       :QUANT1HA_PULVERIZACAO, :QUANT2HA_PULVERIZACAO, :QUANT3HA_PULVERIZACAO,
       :QUANT4HA_PULVERIZACAO, :QUANT5HA_PULVERIZACAO, :QUANT6HA_PULVERIZACAO,
       :QUANT7HA_PULVERIZACAO, :QUANT8HA_PULVERIZACAO,
       :VD_PULVERIZACAO,
       :TANQUE_PULVERIZACAO
  do
  begin
    ID = :id_pulverizacao;
    PRODUTO = :prod1_pulverizacao;
    UN = :unid1_pulverizacao;
    QUANTIDADE = :quant1_pulverizacao;
    QUANTIDADEHA = :quant1ha_pulverizacao;
    VD = :vd_pulverizacao;
    TANQUE = :tanque_pulverizacao;
    FAZENDA = :propriedade;
    SAFRASAIDA = :safra;
    if (coalesce(produto,´´) <> ´´) then
      suspend;

    ID = :id_pulverizacao;
    PRODUTO = :prod2_pulverizacao;
    UN = :unid2_pulverizacao;
    QUANTIDADE = :quant2_pulverizacao;
    QUANTIDADEHA = :quant2ha_pulverizacao;
    VD = :vd_pulverizacao;
    TANQUE = :tanque_pulverizacao;
    FAZENDA = :propriedade;
    SAFRASAIDA = :safra;
    if (coalesce(produto,´´) <> ´´) then
      suspend;

    ID = :id_pulverizacao;
    PRODUTO = :prod3_pulverizacao;
    UN = :unid3_pulverizacao;
    QUANTIDADE = :quant3_pulverizacao;
    QUANTIDADEHA = :quant3ha_pulverizacao;
    VD = :vd_pulverizacao;
    TANQUE = :tanque_pulverizacao;
    FAZENDA = :propriedade;
    SAFRASAIDA = :safra;
    if (coalesce(produto,´´) <> ´´) then
      suspend;

    ID = :id_pulverizacao;
    PRODUTO = :prod4_pulverizacao;
    UN = :unid4_pulverizacao;
    QUANTIDADE = :quant4_pulverizacao;
    QUANTIDADEHA = :quant4ha_pulverizacao;
    VD = :vd_pulverizacao;
    TANQUE = :tanque_pulverizacao;
    FAZENDA = :propriedade;
    SAFRASAIDA = :safra;
    if (coalesce(produto,´´) <> ´´) then
      suspend;

    ID = :id_pulverizacao;
    PRODUTO = :prod5_pulverizacao;
    UN = :unid5_pulverizacao;
    QUANTIDADE = :quant5_pulverizacao;
    QUANTIDADEHA = :quant5ha_pulverizacao;
    VD = :vd_pulverizacao;
    TANQUE = :tanque_pulverizacao;
    FAZENDA = :propriedade;
    SAFRASAIDA = :safra;
    if (coalesce(produto,´´) <> ´´) then
      suspend;

    ID = :id_pulverizacao;
    PRODUTO = :prod6_pulverizacao;
    UN = :unid6_pulverizacao;
    QUANTIDADE = :quant6_pulverizacao;
    QUANTIDADEHA = :quant6ha_pulverizacao;
    VD = :vd_pulverizacao;
    TANQUE = :tanque_pulverizacao;
    FAZENDA = :propriedade;
    SAFRASAIDA = :safra;
    if (coalesce(produto,´´) <> ´´) then
      suspend;

    ID = :id_pulverizacao;
    PRODUTO = :prod7_pulverizacao;
    UN = :unid7_pulverizacao;
    QUANTIDADE = :quant7_pulverizacao;
    QUANTIDADEHA = :quant7ha_pulverizacao;
    VD = :vd_pulverizacao;
    TANQUE = :tanque_pulverizacao;
    FAZENDA = :propriedade;
    SAFRASAIDA = :safra;
    if (coalesce(produto,´´) <> ´´) then
      suspend;

    ID = :id_pulverizacao;
    PRODUTO = :prod8_pulverizacao;
    UN = :unid8_pulverizacao;
    QUANTIDADE = :quant8_pulverizacao;
    QUANTIDADEHA = :quant8ha_pulverizacao;
    VD = :vd_pulverizacao;
    TANQUE = :tanque_pulverizacao;
    FAZENDA = :propriedade;
    SAFRASAIDA = :safra;
    if (coalesce(produto,´´) <> ´´) then
      suspend;
  end
end


que deverá ser usada da seguinte forma:
select 
  produto, 
  un, 
  sum(quantidade) quantidade, 
  sum(quantidadeha) quantidadeha, 
  vd, 
  tanque, 
  fazenda, 
  safrasaida 
from 
  consumo(26,´04/05´)  <-- onde 26 é a fazenda e ´04/05´ a safra 
group by 
  produto, 
  un, 
  vd, 
  tanque, 
  fazenda, 
  safrasaida


bom, espero que seja isso.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar