Ir para conteúdo
eduardohaag

[Resolvido] Calculos na consulta SQL

Recommended Posts

Antes de expor minha duvida gostaria de dizer que pesquisei bastante a respeito e não consegui achar a solução.
Meu problema é o seguinte:
Estou trabalhando em um relatório que gera uma listagem de produtos que vendo e em uma das colunas deve constar o preço de custo do produto de acordo com os preços do materiais e quantidade de cada material utilizado.
Estou trabalhando em VB utilizando banco de dados access.
Problema está em fazer esse calculo do preço de custo direto na Query SQL.

No banco de dados exitem as tabelas Produtos, Composição e Materiais

Colunas: 
Produtos: ID, Descrição, PreçoVenda, Peso
Materiais: ID, Descrição, PreçoCompra, Unidade...
Composição: ID, IdProduto, IdMaterial, Quantidade.

Precisaria que a consulta multiplicasse a quantidade de cada material utilizado para produzir o produto, pelo preço de compra do material e retornasse o valor total dos materiais utilizados.

Não sei se fui muito claro, mas espero que alguém consiga me ajudar.

Já agradeço de antemão

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um produto pode ter N materiais ?

 

O problema é que o access tem limitações para este tipo de coisa , sugiro resolver na camada do VB.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por RENAN KAWAMOTO FAGUNDES
      !

      Olá, boa tarde!
      Estou precisando de uma ajuda em um SCRIPT (SQL).
      Preciso agrupar o resultado por tipo de convênio (CONVENIO).

      Exemplo Acima:
       

       
      Total por tipo de convênio.
      SET DATEFORMAT DMY -- RTM declare @DTINI datetime, @DTFIM datetime set @DTINI = '01/01/2019' set @DTFIM = '01/04/2019' SELECT CASE WHEN CONV_SUS = 'T' THEN 'SUS' WHEN CONV_PARTICULAR = 'T' THEN 'PARTICULAR' WHEN CONV_DS IS NOT NULL THEN 'CONVENIO' END CONVENIO, CONSUMO2.INSU_DS INSUMO, replace(CONSUMO2.EMI_QTDE_COMERCIAL,'.',',') QTDE_COMERCIAL, replace(CONSUMO2.VAL_TOTAL,'.',',') VALOR_TOTAL FROM ( SELECT CONSUMO.* FROM ( SELECT CONV_DS, CONV_SUS, CONV_PARTICULAR, INSU_DS, SUM(ISNULL(EMI_QTDE_COMERCIAL,0)) EMI_QTDE_COMERCIAL, ISNULL(SUM(ISNULL(EMI_QTDE_COMERCIAL,0) * ISNULL(PM,0)),0) VAL_TOTAL FROM ( SELECT CUREMI.*, (SELECT PCONV_DS FROM PLANO_CONVENIO PCONV WHERE PCONV.PCONV_ID = CUREMI.PCONV_ID) PCONV_DS, (SELECT CONV_DS FROM CONVENIO CONV WHERE CONV.CONV_ID = (SELECT CONV_ID FROM PLANO_CONVENIO PCONV WHERE PCONV.PCONV_ID = CUREMI.PCONV_ID) ) CONV_DS, (SELECT CONV_SUS FROM CONVENIO CONV WHERE CONV.CONV_ID = (SELECT CONV_ID FROM PLANO_CONVENIO PCONV WHERE PCONV.PCONV_ID = CUREMI.PCONV_ID) ) CONV_SUS, (SELECT CONV_PARTICULAR FROM CONVENIO CONV WHERE CONV.CONV_ID = (SELECT CONV_ID FROM PLANO_CONVENIO PCONV WHERE PCONV.PCONV_ID = CUREMI.PCONV_ID) ) CONV_PARTICULAR FROM( SELECT INSU_DS, EMI.PCONV_ID, EMI_QTDE_COMERCIAL, EMI.INSU_PRECO_MEDIO_FISCAL PM FROM EMISSAO EMI JOIN SERVICO SERV ON SERV.SERV_ID = EMI.SERV_ID JOIN INSUMO INSU ON INSU.SERV_ID = EMI.SERV_ID LEFT JOIN TIPO_EMISSAO TEMI ON EMI.TEMI_ID = TEMI.TEMI_ID LEFT JOIN ESTOQUE_LOTE ELOTE ON EMI.ELOTE_ID = ELOTE.ELOTE_ID WHERE EMI.ENTI_ID = 1 AND EMI_DT_DISPENSA >= @DTINI AND EMI_DT_DISPENSA < @DTFIM AND INSU.INSU_ID IN (255651, 243116, 243116, 246708, 562, 250466, 413, 808) UNION ALL SELECT INSU_DS, EMI.PCONV_ID, EMI_QTDE_COMERCIAL, EMI.INSU_PRECO_MEDIO_FISCAL PM FROM ITENS_EMISSAO IEMI JOIN EMISSAO EMI ON EMI.EMI_ID = IEMI.EMI_ID JOIN SERVICO SERV ON SERV.SERV_ID = IEMI.SERV_ID JOIN INSUMO INSU ON INSU.SERV_ID = IEMI.SERV_ID LEFT JOIN TIPO_EMISSAO TEMI ON EMI.TEMI_ID = TEMI.TEMI_ID LEFT JOIN ESTOQUE_LOTE ELOTE ON IEMI.ELOTE_ID = ELOTE.ELOTE_ID WHERE EMI.ENTI_ID = 1 AND EMI_DT_DISPENSA >= @DTINI AND EMI_DT_DISPENSA < @DTFIM AND INSU.INSU_ID IN (255651, 243116, 243116, 246708, 562, 250466, 413, 808) UNION ALL SELECT INSU_DS, EMI.PCONV_ID, EMI_QTDE_COMERCIAL, EMI.INSU_PRECO_MEDIO_FISCAL PM FROM ESTORNO_EMISSAO EEMI JOIN ESTORNO EST ON EEMI.EST_ID = EST.EST_ID JOIN EMISSAO EMI ON EMI.EMI_ID = EEMI.EMI_ID JOIN SERVICO SERV ON SERV.SERV_ID = EMI.SERV_ID JOIN INSUMO INSU ON INSU.SERV_ID = EMI.SERV_ID LEFT JOIN TIPO_EMISSAO TEMI ON EMI.TEMI_ID = TEMI.TEMI_ID LEFT JOIN ESTOQUE_LOTE ELOTE ON EEMI.ELOTE_ID = ELOTE.ELOTE_ID WHERE EMI.ENTI_ID = 1 AND EMI_DT_DISPENSA >= @DTINI AND EMI_DT_DISPENSA < @DTFIM AND INSU.INSU_ID IN (255651, 243116, 243116, 246708, 562, 250466, 413, 808) UNION ALL SELECT INSU_DS, EMI.PCONV_ID, EMI_QTDE_COMERCIAL, EMI.INSU_PRECO_MEDIO_FISCAL PM FROM ESTORNO_ITENS_EMISSAO ESTI JOIN ESTORNO EST ON ESTI.EST_ID = EST.EST_ID JOIN ITENS_EMISSAO IEMI ON IEMI.IEMI_ID = ESTI.IEMI_ID JOIN EMISSAO EMI ON EMI.EMI_ID = IEMI.EMI_ID JOIN SERVICO SERV ON SERV.SERV_ID = IEMI.SERV_ID JOIN INSUMO INSU ON INSU.SERV_ID = IEMI.SERV_ID LEFT JOIN TIPO_EMISSAO TEMI ON EMI.TEMI_ID = TEMI.TEMI_ID LEFT JOIN ESTOQUE_LOTE ELOTE ON ESTI.ELOTE_ID = ELOTE.ELOTE_ID WHERE EMI.ENTI_ID = 1 AND EMI_DT_DISPENSA >= @DTINI AND EMI_DT_DISPENSA < @DTFIM AND INSU.INSU_ID IN (255651, 243116, 243116, 246708, 562, 250466, 413, 808)) CUREMI ) CURCC GROUP BY INSU_DS, CONV_DS, CONV_SUS, CONV_PARTICULAR ) CONSUMO ) CONSUMO2 ORDER BY 2, 1  
    • Por stewartcintra@
      Tenho um sistema de contas em php mysql, preciso exibir todas as contas do mes agrupadas por categoria e o campo valorR$ para saber o total em reais de cada categoria.
      Não estou conseguindo, como posso fazer isso?
    • Por Vagner Nunes
      Prezados,
       
      Tenho um ambiente, que tem cerca de uns 80 sites publicados, o problema que está ocorrendo, que além da lentidão, hora aparece a mensagem A connection attempt failed because the connected party did nor properly respond a period of time, or established connection failed because connected host has failed to respond. 
       
      Neste ambiente, as minhas páginas são em ASP.NET com C#, com conexão ao banco de dados MySql.
       
      Não sei como proceder nesta situação, poderiam me ajudar?
       

       
    • Por Fábio.info7
      Olá pessoal, estou precisando de uma grande ajuda, tenho duas tabelas no postgres, são elas: PESSOA e a outra é  ENDERECOS, elas estão relacionadas, oq acontece é que no php eu preciso recuperar o valor do id através da função nextval('nome_da_sequnce'), e não estou sabendo fazer, preciso recuperar o ultimo id e depois realizar o insert nas tabelas relacionadas, poderiam me dar um exemplo de como implementar isso? abaixo deixo o meu codigo php, acredito que esteja errado pois não esta gravando no banco.
       
      Minhas tabelas do banco: CREATE TABLE public.pessoa ( codigo_aluno integer NOT NULL DEFAULT nextval('pessoa_codigo_aluno_seq'::regclass), cpf character varying(11) COLLATE pg_catalog."default" NOT NULL, nome character varying(30) COLLATE pg_catalog."default" NOT NULL, sexo character varying(30) COLLATE pg_catalog."default" NOT NULL, nascimentodata date NOT NULL, email character varying(50) COLLATE pg_catalog."default" NOT NULL, endereco integer, CONSTRAINT pessoa_pkey PRIMARY KEY (codigo_aluno), CONSTRAINT pessoa_endereco_fkey FOREIGN KEY (endereco) REFERENCES public.enderecos (codigo_endereco) ) CREATE TABLE public.enderecos ( codigo_endereco integer NOT NULL DEFAULT nextval('enderecos_codigo_endereco_seq'::regclass), logradouro character varying(200) COLLATE pg_catalog."default" NOT NULL, bairro character varying(80) COLLATE pg_catalog."default" NOT NULL, cidade character varying(100) COLLATE pg_catalog."default" NOT NULL, uf character varying(2) COLLATE pg_catalog."default" NOT NULL, cep character varying(20) COLLATE pg_catalog."default" NOT NULL, CONSTRAINT enderecos_pkey PRIMARY KEY (codigo_endereco) ) ****** ABAIXO O PHP *************************************** <?php try { require_once "conexao.php"; $dados = filter_input_array(INPUT_POST, FILTER_DEFAULT); $sql = "select nextval('pessoa_codigo_aluno_seq')"; $seq = $conn->prepare($sql); $id = $seq->execute(); $id = $seq->fetchAll(PDO::FETCH_ASSOC); $sql = "insert into pessoa (cpf, nome, sexo, nascimentodata, email, endereco ) values (:cpf, :nome, :sexo, :nascimentodata, :email, :fk_endereco )"; $inserir = $conn->prepare($sql); $inserir->bindParam(":cpf", $dados["cpf"]); $inserir->bindParam(":nome", $dados["nome"]); $inserir->bindParam(":sexo", $dados["sexo"]); $inserir->bindParam(":nascimentodata", $dados["nascimentodata"]); $inserir->bindParam(":email", $dados["email"]); $inserir->bindParam(":fk_endereco", $id['codigo_endereco']); $inserir->execute(); // Gravando dados de endereço $sql_end = "insert into enderecos (codigo_endereco, logradouro, bairro, cidade, uf, cep, pessoa )values(:codigo_endereco, :logradouro,:bairro,:cidade,:uf,:cep, :pessoa)"; $end = $conn->prepare($sql_end); $end->bindParam(":codigo_endereco", $id['codigo_endereco']); $end->bindParam(":logradouro", $dados["logradouro"]); $end->bindParam(":bairro", $dados["bairro"]); $end->bindParam(":cidade", $dados["cidade"]); $end->bindParam(":uf", $dados["uf"]); $end->bindParam(":cep", $dados["cep"]); $end->execute(); echo "Dados gravados com sucesso!"; } catch (Exception $e) { echo "Mensagem: " . $e->getMessage() . "<br/>"; echo "Linha do Erro: " . $e->getLine() . "<br/>"; } PRECISO CONSEGUIR INSERIR OS DADOS NAS DUAS TABELAS INSERINDO OS IDS RECUPERADOS PELO NEXTVAL()
    • Por MateusDuarte
      Podem me ajudar? Sou novato em PHP e estou precisando de uma ajudinha.
      Tenho 2 tabelas no banco: filmes e generos.
      Faço o cadastro individual de todos os generos na tabela generos, e no cadastro de filmes eu puxo todos os generos por um multiple select. Até ai tudo certo, ele salva no banco de dados assim:
      genero1, genero2, genero3.
       
      Porém na hora de mostrar eu não sei separar eles das virgulas.
      Segue meu SELECT simples:
      <main class="content"> <?php $sql = "SELECT * FROM genero ORDER BY RAND()"; $result = $connect->query($sql); if($result->num_rows > 0) { while($row = $result->fetch_assoc()) { $teste = $row["id_genero"]; ?> <section class="panel"> <h2><a id="links-generos" href="generos-filmes.php?id=<?php echo $row['id_genero'];?>"><?php echo $row["descricao"];?></a></h2> <div class="recentslider"> <div class="swiper-container"> <div class="swiper-wrapper"> <?php $sql_t = "SELECT * FROM filmes WHERE id_genero = ".$teste." ORDER BY RAND()"; $result_t = $connect->query($sql_t); if($result_t->num_rows > 0) { while($row_t = $result_t->fetch_assoc()) { ?> <div class="swiper-slide"><?php echo "<a href='single-filmes.php?id=".$row_t['id_filme']."&genero=".$row_t['id_genero']."';>";?><img src="capa/<?php echo $row_t["capa_filme"];?>"><h3 class="hometitle"><?php echo $row_t["titulo_filme"];?></h3></a></div> <?php }} else { echo "0 results"; } ?> </div> <div class="nextdirection recent-next"><img src="img/right-arrow.svg"> </div> <div class="leftdirection recent-prev"><img src="img/left-arrow.svg"> </div> </div> </div> </section> <?php }} else { echo "0 results"; } ?> </main> (Desculpa se não ficou alinhado, só copiei e colei.)

      Reparem que primeiro dou um select na tabela genero, e salvo o ID dela em uma variavel, e depois vou um select na tabela filmes usando a variavel que salvei antes como uma condição.
      Porem na tabela filmes, os generos estão salvos separados por virgula. Como consigo fazer um select separando ela das virgulas?
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.