Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Nilson N

[Resolvido] Consulta

Recommended Posts

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

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

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

×

Informação importante

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