Ir para conteúdo

POWERED BY:

Arquivado

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

doido

Multiplicar pelo Alias

Recommended Posts

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

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

 

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

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

×

Informação importante

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