doido 0 Denunciar post Postado Abril 2, 2015 Olá, tenho o seguinte comando: SELECT _TBL_SERVICOS.descricao, _TBL_AGENDAMENTOS.empresa, SUM(IF(DAYOFWEEK(_TBL_AGENDAMENTOS.agexecucao)=1 OR_TBL_AGENDAMENTOS.agexecucao IN (SELECT data FROM _TBL_FERIADOS),0,1)) AS qtdevalor1,SUM(IF(DAYOFWEEK(_TBL_AGENDAMENTOS.agexecucao)=1,1,0 OR _TBL_AGENDAMENTOS.agexecucao IN (SELECT data FROM _TBL_FERIADOS)))AS qtdevalor2, _TBL_SERVICOS.valor1,_TBL_SERVICOS.valor2 FROM _TBL_AGENDAMENTOS LEFT OUTER JOIN _TBL_CIDADES ON_TBL_AGENDAMENTOS.id_cidades = _TBL_CIDADES.id_cidades LEFT OUTER JOIN _TBL_TECNICOS ON _TBL_AGENDAMENTOS.id_tecnicos =_TBL_TECNICOS.id_tecnicos LEFT OUTER JOIN _TBL_SERVICOS ON _TBL_AGENDAMENTOS.id_servicos = _TBL_SERVICOS.id_servicosWHERE _TBL_AGENDAMENTOS.agexecucao BETWEEN "2015/03/01" AND "2015/03/31" AND _TBL_AGENDAMENTOS.empresa = 1 AND _TBL_TECNICOS.nome = "DEIMERSON" AND _TBL_AGENDAMENTOS.execucao <> "CANCELADO" AND _TBL_AGENDAMENTOS.execucao <> "REAGENDADO" AND _TBL_AGENDAMENTOS.execucao <> "" AND _TBL_AGENDAMENTOS.id_servicos = "61" AND_TBL_AGENDAMENTOS.empresa = 1 GROUP BY _TBL_SERVICOS.descricaoObservem que tenho os apelidos qtdevalor1 e qtdevalor2. Ao tentar multiplicar qtdevalor1 * valor1 e qtdevalor2 * valor2 o Mysql não deixa,dizendo não existir os campos qtdevalor1 e qtdevalor2. Não é possível multiplicar usando o apelido? Terei que repetir o comando inteiro referente ao qtdevalor1 e qtdevalor2 para conseguir multiplicar por valor1 e valor2? Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Abril 2, 2015 Teoricamente sim, mas o MySQL permite utilizar variáveis: SET @variavel_exemplo:= 0.00; Antes do exemplo, uma dica, identação facilita o entendimento de qualquer coisa. SET @variavel_exemplo1:= 0.00; SET @variavel_exemplo2:= 0.00; SELECT s.descricao, a.empresa, @variavel_exemplo1:= SUM(IF(DAYOFWEEK(a.agexecucao)=1 OR a.agexecucao IN (SELECT data FROM _TBL_FERIADOS),0,1)) AS qtdevalor1, @variavel_exemplo2:= SUM(IF(DAYOFWEEK(a.agexecucao)=1,1,0) OR a.agexecucao IN (SELECT data FROM _TBL_FERIADOS))) AS qtdevalor2, s.valor1, s.valor2, @variavel_exemplo1 * s.valor1 AS valor_final1, @variavel_exemplo2 * s.valor2 AS valor_final2 FROM _TBL_AGENDAMENTOS AS a # ALIAS para a tabela: a LEFT OUTER JOIN _TBL_CIDADES AS c # ALIAS para a tabela: c ON a.id_cidades = c.id_cidades LEFT OUTER JOIN _TBL_TECNICOS AS t # ALIAS para a tabela: t ON a.id_tecnicos = t.id_tecnicos LEFT OUTER JOIN _TBL_SERVICOS AS s # ALIAS para a tabela: s ON a.id_servicos = s.id_servicos WHERE a.agexecucao BETWEEN "2015/03/01" AND "2015/03/31" AND a.empresa = 1 AND t.nome = "DEIMERSON" AND a.execucao <> "CANCELADO" AND a.execucao <> "REAGENDADO" AND a.execucao <> "" AND a.id_servicos = "61" AND a.empresa = 1 GROUP BY s.descricao Compartilhar este post Link para o post Compartilhar em outros sites
doido 0 Denunciar post Postado Abril 2, 2015 Teoricamente sim, mas o MySQL permite utilizar variáveis: SET @variavel_exemplo:= 0.00; Antes do exemplo, uma dica, identação facilita o entendimento de qualquer coisa. SET @variavel_exemplo1:= 0.00; SET @variavel_exemplo2:= 0.00; SELECT s.descricao, a.empresa, @variavel_exemplo1:= SUM(IF(DAYOFWEEK(a.agexecucao)=1 OR a.agexecucao IN (SELECT data FROM _TBL_FERIADOS),0,1)) AS qtdevalor1, @variavel_exemplo2:= SUM(IF(DAYOFWEEK(a.agexecucao)=1,1,0) OR a.agexecucao IN (SELECT data FROM _TBL_FERIADOS))) AS qtdevalor2, s.valor1, s.valor2, @variavel_exemplo1 * s.valor1 AS valor_final1, @variavel_exemplo2 * s.valor2 AS valor_final2 FROM _TBL_AGENDAMENTOS AS a # ALIAS para a tabela: a LEFT OUTER JOIN _TBL_CIDADES AS c # ALIAS para a tabela: c ON a.id_cidades = c.id_cidades LEFT OUTER JOIN _TBL_TECNICOS AS t # ALIAS para a tabela: t ON a.id_tecnicos = t.id_tecnicos LEFT OUTER JOIN _TBL_SERVICOS AS s # ALIAS para a tabela: s ON a.id_servicos = s.id_servicos WHERE a.agexecucao BETWEEN "2015/03/01" AND "2015/03/31" AND a.empresa = 1 AND t.nome = "DEIMERSON" AND a.execucao <> "CANCELADO" AND a.execucao <> "REAGENDADO" AND a.execucao <> "" AND a.id_servicos = "61" AND a.empresa = 1 GROUP BY s.descricao Meu amigo, grato pelo exemplo e explicação. Realmente a identação é importante, lembrarei disso nas próximas. Ficou perfeito, mas tive que remover as 2 primeiras linhas, pois o valor ficava só ZERADO no final, após remover os SETs, as variáveis passaram a receber corretamente os valores das linhas 7 e 8. Porque isso aconteceu??? Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Abril 2, 2015 Pode ser o DATA TYPE que as variáveis assumiram, um CONVERT( Expr, Type ) pode resolver. Esclarecimentos: - Expr: Expressão, valor a ser convertido. - Type: Tipo de dado (BINARY[(N)], CHAR[(N)], DATE, DATETIME, DECIMAL[(M[,D])], SIGNED [iNTEGER], TIME, UNSIGNED [iNTEGER]) SIGNED e UNSIGNED são para números inteiros, a diferença são os valores mínimo e máximo. Por exemplo, o tipo TINYINT, quando é SIGNED, aceita somente os valores de -128 a 127, mas quando é UNSIGNED, aceita somente valores entre 0 e 255. Compartilhar este post Link para o post Compartilhar em outros sites