Pregunta

Tengo una consulta que se parece un poco a esto:

SELECT weekEnd, MAX(timeMonday)
FROM timesheet
GROUP BY weekEnd

Los valores válidos para timeMonday son: nulo, -1, 0, 1-24. En este momento, MAX () coloca la preferencia de esos valores en el orden nulo, -1, 0, 1-24, sin embargo, lo que realmente quiero es -1, nulo, 0, 1-24, por lo que nulo se considera más alto que -1. Sé que MAX no puede hacer esto, ¿cuál es la forma más fácil de lograrlo?

¿Fue útil?

Solución

  

SELECT weekEnd, MAX (coalesc (timeMonday, -. 5))   DE parte de horas   GRUPO POR FIN DE SEMANA

Luego convierta -.5 de nuevo a nulo

Otros consejos

SELECT weekEnd, CASE WHEN maxTimeMonday = -0.5 THEN NULL ELSE maxTimeMonday END maxTimeMonday 
FROM (
   SELECT weekEnd, MAX(CASE WHEN timeMonday IS NULL THEN -0.5 ELSE timeMonday END) maxTimeMonday 
     FROM timesheet
    GROUP BY weekEnd) T

reemplazando NULL por -0.5 al calcular MAX y luego revertirlo a NULL.

(sintaxis de MS SQL Server)

SELECT weekEnd, MAX(COALESCE(timeMonday, '-0.1'))
FROM timesheet
GROUP BY weekEnd

Editar: no he probado esto

SELECT weekEnd, REPLACE(MAX(COALESCE(timeMonday, '-0.1')), '-0.1', 'null')
FROM timesheet
GROUP BY weekEnd
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top