rnet 0 Denunciar post Postado Janeiro 26, 2005 Pessoal, Segue abaixo um código SQL. Meu objetivo é saber a soma da quantidade dos produtos que tiveram SAIDA (S) e DEVOLUCAO (D): SELECT P.CODIGO, P.DESCRICAO_COMPRA, U.NOME AS UNIDADE, ( SELECT NVL(SUM(RA.QUANTIDADE)) FROM REQUISICAO_ATENDIMENTO RA INNER JOIN REQUISICAO R ON RA.REQUISICAO = R.CODIGO INNER JOIN UNID_ADM CE ON R.UNID_ADM_REQUISITADA = CE.CODIGO WHERE RA.PRODUTO = :PRODUTO AND RA.TIPO = 'S' AND R.UNID_ADM_REQUISITANTE = :UA ) AS SA, ( SELECT NVL(SUM(RA.QUANTIDADE)) FROM REQUISICAO_ATENDIMENTO RA INNER JOIN REQUISICAO R ON RA.REQUISICAO = R.CODIGO INNER JOIN UNID_ADM CE ON R.UNID_ADM_REQUISITADA = CE.CODIGO WHERE RA.PRODUTO = :PRODUTO AND RA.TIPO = 'D' AND R.UNID_ADM_REQUISITANTE = :UA ) AS DR FROM PRODUTO PINNER JOIN UNIDADE U ON P.UNIDADE_COMPRA = U.CODIGO WHERE P.CODIGO = :PRODUTO ORDER BY P.DESCRICAO_COMPRA O problema é: Quando eu coloco essa linha "AND R.UNID_ADM_REQUISITANTE :UA" o valor retornado é 0 (zero), mas quando eu tiro esta linha, o valor está correto. []'s Compartilhar este post Link para o post Compartilhar em outros sites
Aroldo Zanela 0 Denunciar post Postado Janeiro 26, 2005 Colega,É Oracle?Não sei se entendi o requisito: SELECT P.CODIGO, P.DESCRICAO_COMPRA, U.NOME AS UNIDADE, ( SELECT NVL(SUM(RA.QUANTIDADE)) FROM REQUISICAO_ATENDIMENTO RA INNER JOIN REQUISICAO R ON RA.REQUISICAO = R.CODIGO INNER JOIN UNID_ADM CE ON R.UNID_ADM_REQUISITADA = CE.CODIGO WHERE RA.PRODUTO = :PRODUTO AND RA.TIPO IN ('S','D') AND R.UNID_ADM_REQUISITANTE = :UA ) AS QTDE FROM PRODUTO PINNER JOIN UNIDADE U ON P.UNIDADE_COMPRA = U.CODIGO WHERE P.CODIGO = :PRODUTO ORDER BY P.DESCRICAO_COMPRA Compartilhar este post Link para o post Compartilhar em outros sites
rnet 0 Denunciar post Postado Janeiro 26, 2005 Colega,É Oracle?Não sei se entendi o requisito: <font face="verdana">SELECT P.CODIGO, P.DESCRICAO_COMPRA, U.NOME AS UNIDADE, ( SELECT NVL(SUM(RA.QUANTIDADE)) FROM REQUISICAO_ATENDIMENTO RA INNER JOIN REQUISICAO R ON RA.REQUISICAO = R.CODIGO INNER JOIN UNID_ADM CE ON R.UNID_ADM_REQUISITADA = CE.CODIGO WHERE RA.PRODUTO = :PRODUTO AND RA.TIPO IN ('S','D') AND R.UNID_ADM_REQUISITANTE = :UA ) AS QTDE FROM PRODUTO PINNER JOIN UNIDADE U ON P.UNIDADE_COMPRA = U.CODIGO WHERE P.CODIGO = :PRODUTO ORDER BY P.DESCRICAO_COMPRA </font> É Oracle?É Firebird.Eu não disse os requisitos... Eu preciso saber a quantidade de SAIDAS e a quantidade de DEVOLUCOES ocorridas por uma Unidade Administrativa (Departamento). Eu precisaria do período também, mas não coloquei aqui para não complicar... ok?Da maneira que você colocou funciona, mas não atenderia os requisitos, colega. Alguma outra dica?[]'s Compartilhar este post Link para o post Compartilhar em outros sites
Aroldo Zanela 0 Denunciar post Postado Janeiro 26, 2005 Colega,Eu trocaria a subconsulta por um agrupamento. (Group By). Compartilhar este post Link para o post Compartilhar em outros sites
rnet 0 Denunciar post Postado Janeiro 26, 2005 Desculpe-me, mas não entendi como seria este Agrupamento, pois eu preciso diferenciar os tipos, já que a tabela é a mesma (REQUISICAO_ATENDIMENTO -TIPO ('S', 'D')). Não consegui vizualizar um agrupamento... Seria possível postar um código como exemplo? Compartilhar este post Link para o post Compartilhar em outros sites
rnet 0 Denunciar post Postado Janeiro 26, 2005 SELECT P.CODIGO, P.DESCRICAO_COMPRA, U.NOME AS UNIDADE, ( SELECT NVL(SUM(RA.QUANTIDADE)) FROM REQUISICAO_ATENDIMENTO RA INNER JOIN REQUISICAO R ON RA.REQUISICAO = R.CODIGO INNER JOIN EMPRESA_UA EUA ON R.UNID_ADM_REQUISITANTE = EUA.UNID_ADM WHERE RA.PRODUTO = P.CODIGO AND RA.TIPO = 'S' ) AS SA, ( SELECT NVL(SUM(RA.QUANTIDADE)) FROM REQUISICAO_ATENDIMENTO RA INNER JOIN REQUISICAO R ON RA.REQUISICAO = R.CODIGO INNER JOIN EMPRESA_UA EUA ON R.UNID_ADM_REQUISITANTE = EUA.UNID_ADM WHERE RA.PRODUTO = P.CODIGO AND RA.TIPO = 'D' ) AS DR FROM REQUISICAO_ATENDIMENTO RA INNER JOIN REQUISICAO R ON RA.REQUISICAO = R.CODIGO INNER JOIN PRODUTO P ON RA.PRODUTO = P.CODIGOINNER JOIN UNIDADE U ON P.UNIDADE_COMPRA = U.CODIGO WHERE P.CODIGO IN (284, 285) AND R.UNID_ADM_REQUISITANTE = :UA1 AND R.UNID_ADM_REQUISITADA = :UA2 AND CAST(RA.DATA AS DATE) BETWEEN '01/26/2005' AND '01/26/2005' GROUP BY P.CODIGO, P.DESCRICAO_COMPRA, U.NOME ORDER BY P.DESCRICAO_COMPRA Valeu mesmo Aroldo! Cara, se não fosse o Fórum eu ficaria o resto da semana e não conseguiria... Obrigado mesmo! Só uma idéia, Aroldo.... Particularmente, você teria uma tabela única de MOVIMENTAÇÃO, na qual receberia todos os dados inerentes a SAIDAS, ENTRADAS, CORRECOES de ESTOQUE, ou faria separado, como eu fiz, REQUISICAO_ATENDIMENTO, ENTRADA_PRODUTO, ENTRADA_DEVOLUCAO, ESTOQUE_CORRECAO... []'s Compartilhar este post Link para o post Compartilhar em outros sites
Aroldo Zanela 0 Denunciar post Postado Janeiro 27, 2005 Colega,Eu faço em tabelas separadas, até para facilitar o entendimento do modelo, apesar de poder descrever auto-relacionamento, bem como, temos tabelas com milhões (IBM DB2-AS/400) de registros que, juntas só iriam degradar o acesso aos dados. Compartilhar este post Link para o post Compartilhar em outros sites