Utilizar ALIAS para condicionales y operaciones de suma, resta etc

publicado por: Anonymous

Quiero comparar el ALIAS horasMes con el ALIAS
PlanWorkHours y asignar el resultado a una variable nueva,
sin embargo esto no es posible ya que estos ALIAS son temporales o no representan como tal
una columna de la tabla, existe alguna forma de implementar
esta solucion.

if horasMes>PlanWorkHours
HorasExtra=PlanWorkHours-horasMes

select DISTINCT c.CodeCompany AS CompanyCode,
    CONVERT(char(6), GETDATE(), 112) AS Period,
    a.idClave as EmployeID,
    c.nombre + ' ' + c.apellidos as EmployeName,
    d.idDepto as Depto,
    t.HorasAlMes as PlanWorkHours,
    SUM(DATEDIFF(HOUR, fechaEntrada, fechaSalida) %24) AS horasMes,
        abs(t.HorasAlMes-SUM(DATEDIFF(HOUR, fechaEntrada, fechaSalida) %24)) as Resta


        from tblasistencia a JOIN tblpersonal c ON a.idClave=c.idClave
                             JOIN tblDepto    d ON c.fkDepto=d.idDepto
                             JOIN tblTurno    t ON c.fkTurno=t.idTurno
             where 
             fechaEntrada BETWEEN CONVERT(DATETIME, '2017-11-01 00:00:00',121) and 
                CONVERT(DATETIME,'2017-11-30 23:59:59',121)and c.fkStatus !=1 
            group by
            c.CodeCompany, 
            a.idClave, 
            d.idDepto,
            t.HorasAlMes,
            c.nombre + ' ' + c.apellidos

solución

Puedes hacer los cálculos para PlanWorkHours y horasMes dentro de una tabla derivada (o también dentro de una expresión de tabla común si prefieres), lo que luego te permite usar estos 2 valores como columnas normales en tu consulta principal.

Ejemplo:

select ...,
       HorasExtra=PlanWorkHours-horasMes -- aquí sí puedes usar PlanWorkHours y horasMes como quieras
  from (
    select ...,
           t.HorasAlMes as PlanWorkHours,
           SUM(DATEDIFF(HOUR, fechaEntrada, fechaSalida) %24) AS horasMes,
           ...
      from ...  
  ) t

O, usando una expresión de tabla común:

;with cte as (
    select ...,
           t.HorasAlMes as PlanWorkHours,
           SUM(DATEDIFF(HOUR, fechaEntrada, fechaSalida) %24) AS horasMes,
           ...
      from ...  
)
select ...,
       HorasExtra=PlanWorkHours-horasMes -- aquí sí puedes usar PlanWorkHours y horasMes como quieras
  from cte
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *