Nilson N 0 Denunciar post Postado Janeiro 11, 2010 Boa noite, Nesta consulta preciso multiplicar o resultado de um IF pelo resultado de um SELECT, e depois dividir por 12. Tentei fazer isso dessa forma: (parcelas * valorCalculado / 12) as quota, mas o MySQL retorna o erro: coluna `parcelas` desconhecida. Sendo que a coluna parcelas não existe em nenhuma tabela, porque foi "criada" durante a consulta, o mesmo ocorre com a coluna valorCalculado. Alguém pode ajudar-me? SELECT Contribuicoes.codContribuicao, Regioes.regiao, Colaboradores.nomeColaborador, Contribuintes.codContribuinte, nomeContribuinte, IF( avulsa = "0", "Mensal", "Avulsa" ) AS tipo, IF( dataFim = "00-00-0000", dataInicio, CONCAT( dataInicio, " a ", dataFim ) ) AS periodo, IF( tipoMoeda = "r", "Real", "Salário Mínimo" ) AS moeda, If( Contribuicoes.tipoMoeda = "sm", round( valor *440 /100, 2 ) , valor ) AS valorCalculado, dataInicio, dataFim, TiposCobrancas.tipoCobranca, Contribuicoes.codRegiao, Contribuicoes.codColaborador, IF(tipoMoeda="r" && dataFim="0000-00-00", "52", IF(tipoMoeda!="r" && dataFim!="0000-00-00", "66" , IF(tipoMoeda!="r" && dataFim="0000-00-00","72", IF(tipoMoeda="r" && dataFim!="0000-00-00","99",null)) ) ) AS status,[b](SELECT COUNT(*) FROM Parcelas WHERE Parcelas.codContribuicao = Contribuicoes.codContribuicao AND anoCampanha = 2009) AS parcelas[/b], [b](parcelas * valorCalculado / 12) as quota[/b] FROM Contribuintes, Contribuicoes, Colaboradores, Regioes, TiposCobrancas WHERE Contribuicoes.codContribuinte = Contribuintes.codContribuinte AND Colaboradores.codColaborador = Contribuicoes.codColaborador AND Regioes.codRegiao = Colaboradores.codRegiao AND TiposCobrancas.codTipoCobranca = Contribuicoes.tipoCobranca AND dataInicio BETWEEN "2009-01-01" AND "2009-12-31" AND ( dataFim < "2010-01-01" OR dataFim = "0000-00-00" ) ORDER BY status, regiao, nomeColaborador Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Janeiro 12, 2010 um coluna nao pode ser usada para calcular outras durante um query, pois elas sao calculadas ao mesmo tempo, a coluna teria q estar no from pra essa consulta funfar, ou seja basta tirar aquela parte do select por no from Compartilhar este post Link para o post Compartilhar em outros sites
Nilson N 0 Denunciar post Postado Janeiro 12, 2010 Obrigado giesta, a versão final da SQL ficou assim: SELECT CONCAT(Contribuicoes.codRegiao," ",Regioes.regiao) AS Regiao, CONCAT(Contribuicoes.codColaborador," ",Colaboradores.nomeColaborador) AS Colaborador, IF(tipoMoeda="r" && dataFim="0000-00-00", "52", IF(tipoMoeda!="r" && dataFim!="0000-00-00", "66", IF(tipoMoeda!="r" && dataFim="0000-00-00","72", IF(tipoMoeda="r" && dataFim!="0000-00-00","99",null)))) AS status, IF( avulsa = "0", "Mensal", "Avulso" ) AS tipo, CONCAT(Contribuicoes.codCampanha,".",Contribuicoes.codContribuicao) AS Campanha, CONCAT(Contribuintes.codContribuinte," ",nomeContribuinte) AS Contribuinte, IF(dataFim="00-00-0000", CONCAT(DATE_FORMAT(dataInicio,"%d/%m/%Y")," - Em diante"), CONCAT(DATE_FORMAT(dataInicio,"%d/%m/%Y")," - ",DATE_FORMAT(dataFim,"%d/%m/%Y"))) AS periodo, SalariosMinimos.salarioMinimoOsuc, IF( Contribuicoes.tipoMoeda = "sm", round( valor * salarioMinimoOsuc / 100, 2 ) , valor ) AS valorCalculado, (SELECT COUNT(*) FROM Parcelas WHERE Parcelas.codContribuicao = Contribuicoes.codContribuicao AND anoCampanha = 2009) AS parcelas, IF(avulsa != "0",round(((SELECT COUNT(*) FROM Parcelas WHERE Parcelas.codContribuicao = Contribuicoes.codContribuicao AND anoCampanha = 2009) * If( Contribuicoes.tipoMoeda = "sm", valor * salarioMinimoOsuc / 100 , valor )),2),"") AS Avulso, IF(avulsa = "0",round(((SELECT COUNT(*) FROM Parcelas WHERE Parcelas.codContribuicao = Contribuicoes.codContribuicao AND anoCampanha = 2009) * If( Contribuicoes.tipoMoeda = "sm", valor * salarioMinimoOsuc / 100 , valor )),2),"") AS Mensal, round(((SELECT COUNT(*) FROM Parcelas WHERE Parcelas.codContribuicao = Contribuicoes.codContribuicao AND anoCampanha = 2009) * If( Contribuicoes.tipoMoeda = "sm", valor * salarioMinimoOsuc / 100 , valor ) / 12), 2 ) as quota, TiposCobrancas.tipoCobranca FROM Contribuintes, Contribuicoes, Colaboradores, Regioes, TiposCobrancas, SalariosMinimos WHERE Contribuicoes.codContribuinte = Contribuintes.codContribuinte AND Colaboradores.codColaborador = Contribuicoes.codColaborador AND Regioes.codRegiao = Colaboradores.codRegiao AND TiposCobrancas.codTipoCobranca = Contribuicoes.tipoCobranca AND dataInicio BETWEEN "2009-01-01" AND "2009-12-31" AND (dataFim <= "2009-12-31" OR dataFim = "0000-00-00") AND SalariosMinimos.ano = 2009 ORDER BY regiao, nomeColaborador, status Compartilhar este post Link para o post Compartilhar em outros sites