Fórum Comando Union... #60884
22/09/2009
0
E indo direto ao assunto, não sei usar o comando Union e to precisando de algo do tipo pra desenvolver uma query.
Eu tenho uma procedure que retorna a posição do estoque caso o usuário queira saber a quantidade em estoque de um determinado produto em uma determinada data.
E agora eu eu preciso listar a movimentação de estoque do usuário. Pra isso eu defini duas datas, e preciso que quando o usuário definir a data inicial, mostre a quantidade em estoque daquela data pra eu ir somando a cada entrada que aconteceu até a data final e diminuindo pra cada saída. e então mostrar analíticamente as transações de um determinado produto durante um intervalo ´X´ de tempo. Espero ter sido específico :)
Aí vai a forma com que eu estou fazendo a query que está óbviamente errada.
A query de baixo ta certa, ta executando direitinho, oque eu quero é pegar a quantidade da de cima:
SELECT NR_QTD NR_QTD_INI FROM PRC_POSICAO_ESTOQUE(:vDATA)
UNION
SELECT E.CD_ENT, E.CD_PRD, DS_PRD, NR_QTD, DS_NAT_OPE, DH_ENT FROM ENTRADAS_ITENS E
LEFT JOIN ENTRADAS T ON (T.CD_ENT = E.CD_ENT)
LEFT JOIN PRODUTOS P ON (P.CD_PRD = E.CD_PRD)
WHERE (DH_ENT >= :vDATA) AND (DH_ENT <= :vDATA2)
ORDER BY CD_PRD
Spleen
Curtir tópico
+ 0Posts
22/09/2009
Afarias
UNION apenas realiza a união de conjuntos de tuplas (linhas) com atributos (colunas) iguais.
O q vc deseja pode ser realizado no cliente (código do seu relatório) a partir dos dados dos SELECTS apresentados ou no servidor com um Stored Procedure.
De qualquer forma, vc pode com UNION ter os registros da posição inicial de cada produto + as movimentações, só precisa ajustar os atributos, de forma que teria algo assim:
SELECT ´000´, CD_PRD, DS_PRD, NR_QTD, ´POSICAO´, DH_POSICAO FROM PRC_POSICAO_ESTOQUE(:vDATA) UNION SELECT E.CD_ENT, E.CD_PRD, DS_PRD, NR_QTD, DS_NAT_OPE, DH_ENT FROM ENTRADAS_ITENS E LEFT JOIN ENTRADAS T ON (T.CD_ENT = E.CD_ENT) LEFT JOIN PRODUTOS P ON (P.CD_PRD = E.CD_PRD) WHERE (DH_ENT >= :vDATA) AND (DH_ENT <= :vDATA2) ORDER BY 2
Veja que tudo q fiz foi dispor os atributos no 1º select semelhante ao 2º select (mesma quantidade, mesmo tipo, na sequência) -- ordenado pelo 2º atributo do conjunto resultante
T+
Gostei + 0
22/09/2009
Spleen
Eu não queria ter que criar uma procedure pq pra atualizar nos clientes fica mais trabalhoso. Então tudo que eu puder fazer de forma mais tranquila, fica melhor.
Mas acho que vai ter que ser na procedure mesmo.
Vlw pela atenção, abraço.
Gostei + 0
22/09/2009
Afarias
1) fazer no código da aplicação/relatório (nesses casos é o q eu costumo fazer)
2) se estiver usando FB 2.1, vc pode usar EXECUTE BLOCK. Assim vc tem todo o poder de um procedimento, sem ter q criá-lo na base de dados (já q vc deseja por alguma razão evitar isto)
T+
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)