deagle30 0 Denunciar post Postado Fevereiro 14, 2014 Olá a todos! Estou com uma dúvida no MySQL e na pesquisa não encontrei nenhuma luz para essa dúvida. Ocorre que preciso realizar um calculo a partir de 3 colunas de uma tabela através do SELCT: SELECT VALOR_1, OPERADOR_1, VALOR_2 FROM minha_tabela Sendo que VALOR_1 = 10 esses valores podem variar OPERADOR_1 = pode ser + - * ou / VVALOR_2 = 120 esses valores podem variar Se alguem tiver alguma luz para esse problema me avise. Grato pela ajuda. Compartilhar este post Link para o post Compartilhar em outros sites
Roberto Fagundes 40 Denunciar post Postado Fevereiro 14, 2014 Ficaria mais ou menos assim: select case OPERADOR_1 when '+' then VALOR_1 + VALOR_2 when '-' then VALOR_1 - VALOR_2 when '*' then VALOR_1 * VALOR_2 when '/' then VALOR_1 / VALOR_2 end resultado from minha_tabela; Compartilhar este post Link para o post Compartilhar em outros sites
deagle30 0 Denunciar post Postado Fevereiro 14, 2014 Ficaria mais ou menos assim: select case OPERADOR_1 when '+' then VALOR_1 + VALOR_2 when '-' then VALOR_1 - VALOR_2 when '*' then VALOR_1 * VALOR_2 when '/' then VALOR_1 / VALOR_2 end resultado from minha_tabela; Roberto Fagundes, muito obrigado pela dica. Rodou perfeitamente. Com essa orientação espero solucionar toda a problematica para essa questão. Compartilhar este post Link para o post Compartilhar em outros sites
Roberto Fagundes 40 Denunciar post Postado Fevereiro 14, 2014 Coloque o tópico que te ajudou como solução do seu problema, visando outros usuários ter a mesma dúvida.. Poder encontrar rapidamente a solução... Compartilhar este post Link para o post Compartilhar em outros sites
deagle30 0 Denunciar post Postado Fevereiro 14, 2014 Ficaria mais ou menos assim: select case OPERADOR_1 when '+' then VALOR_1 + VALOR_2 when '-' then VALOR_1 - VALOR_2 when '*' then VALOR_1 * VALOR_2 when '/' then VALOR_1 / VALOR_2 end resultado from minha_tabela; Roberto, devia ter mencionado no início do Post que possuo 4 colunas para operadores: OPERADOR_1 = pode ser + - * ou / OPERADOR_2 = pode ser + - * ou / OPERADOR_3 = pode ser + - * ou / OPERADOR_4 = pode ser + - * ou / e 4 campos para valores VALOR_1 VALOR_2 VALOR_3 VALOR_4 Essa tabela destina-se a inserir formulas pelo usuário, por exemplo: 100 * 12 / 10 + 100 Essa solução se aplica para esse exemplo. Compartilhar este post Link para o post Compartilhar em outros sites
Roberto Fagundes 40 Denunciar post Postado Fevereiro 14, 2014 Cara consegui fazer essa baderna aqui kkkk Veja se da certo: select case OPERADOR_3 when '+' then (case OPERADOR_2 WHEN '+' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) + VALOR_3 WHEN '-' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) - VALOR_3 WHEN '*' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) * VALOR_3 WHEN '/' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) / VALOR_3 END) + VALOR_4 when '-' then (case OPERADOR_2 WHEN '+' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) + VALOR_3 WHEN '-' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) - VALOR_3 WHEN '*' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) * VALOR_3 WHEN '/' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) / VALOR_3 END) - VALOR_4 when '*' then (case OPERADOR_2 WHEN '+' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) + VALOR_3 WHEN '-' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) - VALOR_3 WHEN '*' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) * VALOR_3 WHEN '/' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) / VALOR_3 END) * VALOR_4 when '/' then (case OPERADOR_2 WHEN '+' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) + VALOR_3 WHEN '-' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) - VALOR_3 WHEN '*' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) * VALOR_3 WHEN '/' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) / VALOR_3 END) / VALOR_4 END RESULT FROM minha_tabela; Compartilhar este post Link para o post Compartilhar em outros sites
deagle30 0 Denunciar post Postado Fevereiro 17, 2014 Cara consegui fazer essa baderna aqui kkkk Veja se da certo: select case OPERADOR_3 when '+' then (case OPERADOR_2 WHEN '+' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) + VALOR_3 WHEN '-' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) - VALOR_3 WHEN '*' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) * VALOR_3 WHEN '/' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) / VALOR_3 END) + VALOR_4 when '-' then (case OPERADOR_2 WHEN '+' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) + VALOR_3 WHEN '-' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) - VALOR_3 WHEN '*' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) * VALOR_3 WHEN '/' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) / VALOR_3 END) - VALOR_4 when '*' then (case OPERADOR_2 WHEN '+' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) + VALOR_3 WHEN '-' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) - VALOR_3 WHEN '*' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) * VALOR_3 WHEN '/' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) / VALOR_3 END) * VALOR_4 when '/' then (case OPERADOR_2 WHEN '+' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) + VALOR_3 WHEN '-' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) - VALOR_3 WHEN '*' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) * VALOR_3 WHEN '/' THEN (case OPERADOR_1 WHEN '+' THEN VALOR_1 + VALOR_2 WHEN '-' THEN VALOR_1 - VALOR_2 WHEN '*' THEN VALOR_1 * VALOR_2 WHEN '/' THEN VALOR_1 / VALOR_2 end) / VALOR_3 END) / VALOR_4 END RESULT FROM minha_tabela; Bom dia! preciso na verdade que o usuário abasteça essa tabela com as equações pertinetes a certos indicadores. Por exemplo: Valor Apple = 300 / 3 * 120 O fato é que preciso que esse resultado seja gerado via SELECT no MySQL, só que os operadores da equação podem ser variados, de acordo com a necessidade do cliente. Por isso imaginei criar uma coluna para cada valor e operador. Nesse caso felizmente existe uma limitação sim, e esta em 4 valores para até 3 operadores. O MySQL não reconhece um SELECT para os valores e os operadores empregados. Ex: SELECT valor_1 operador_1 valor_2 FROM My_tabela - nesse caso ele deve reconhecer o operador inserido na coluna. normalmente o MySQL aceita somente assim: SELECT valor_1 * valor_2 FROM My_tabela Compartilhar este post Link para o post Compartilhar em outros sites
Roberto Fagundes 40 Denunciar post Postado Fevereiro 17, 2014 Bom, eu criei uma tabela parecida com a sua e executei esse select e ele me trouxe o resultado certinho... Compartilhar este post Link para o post Compartilhar em outros sites
deagle30 0 Denunciar post Postado Fevereiro 17, 2014 Bom, eu criei uma tabela parecida com a sua e executei esse select e ele me trouxe o resultado certinho... segue a tabela: CREATE TABLE IF NOT EXISTS `indicador_cadastro` ( `id` int(11) NOT NULL AUTO_INCREMENT, `area` varchar(500) DEFAULT NULL, `processo` varchar(500) DEFAULT NULL, `categoria` varchar(500) DEFAULT NULL, `nome` varchar(500) DEFAULT NULL, `unidade` varchar(200) DEFAULT NULL, `objetivo` varchar(200) DEFAULT NULL, `coleta` varchar(250) DEFAULT NULL, `responsavel` varchar(250) DEFAULT NULL, `coleta_periodo` varchar(250) DEFAULT NULL, `coleta_data_inicio` date DEFAULT NULL, `coleta_data_final` date DEFAULT NULL, `responsavel_analise` varchar(250) DEFAULT NULL, `meta_inicial` varchar(250) DEFAULT NULL, `analise` varchar(250) DEFAULT NULL, `observacao` longtext, `indicador_1` varchar(250) DEFAULT NULL, `operador_1` varchar(250) DEFAULT NULL, `valor_1` tinyint(4) DEFAULT NULL, `indicador_2` varchar(250) DEFAULT NULL, `operador_2` varchar(250) DEFAULT NULL, `valor_2` tinyint(4) DEFAULT NULL, `indicador_3` varchar(250) DEFAULT NULL, `operador_3` varchar(250) DEFAULT NULL, `valor_3` tinyint(4) DEFAULT NULL, `indicador_4` varchar(250) DEFAULT NULL, `operador_4` varchar(250) DEFAULT NULL, `valor_4` tinyint(4) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0 AUTO_INCREMENT=27 ; -- -- Extraindo dados da tabela `indicador_cadastro` -- INSERT INTO `indicador_cadastro` (`id`, `area`, `processo`, `categoria`, `nome`, `unidade`, `objetivo`, `coleta`, `responsavel`, `coleta_periodo`, `coleta_data_inicio`, `coleta_data_final`, `responsavel_analise`, `meta_inicial`, `analise`, `observacao`, `indicador_1`, `operador_1`, `valor_1`, `indicador_2`, `operador_2`, `valor_2`, `indicador_3`, `operador_3`, `valor_3`, `indicador_4`, `operador_4`, `valor_4`) VALUES (26, '', NULL, NULL, '', '', '', '', '', '', '0000-00-00', '0000-00-00', '', '', '', '', 'Indicador 1', '+', 100, 'indicador 2', '*', 15, 'indicador 3', '/', 10, '', '', 0); /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; Compartilhar este post Link para o post Compartilhar em outros sites
Roberto Fagundes 40 Denunciar post Postado Fevereiro 17, 2014 Eu executei aqui, e funcionou de forma dinâmica... Compartilhar este post Link para o post Compartilhar em outros sites
deagle30 0 Denunciar post Postado Fevereiro 17, 2014 Eu executei aqui, e funcionou de forma dinâmica... Roberto, fiz aqui e funcionou perfeitamente...rs Cara, sinistro seu SELECT... Valeu mesmo pela ajuda! você é de onde? Compartilhar este post Link para o post Compartilhar em outros sites
Roberto Fagundes 40 Denunciar post Postado Fevereiro 17, 2014 Roberto, fiz aqui e funcionou perfeitamente...rs Cara, sinistro seu SELECT... Valeu mesmo pela ajuda! você é de onde? SP, marca o post como solução do tópico... Compartilhar este post Link para o post Compartilhar em outros sites