Domanda

Ho una query che assomiglia un po 'a questa:

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

I valori validi per timeMonday sono: null, -1, 0, 1-24. Al momento, MAX () posiziona la preferenza di quei valori nell'ordine null, -1, 0, 1-24, tuttavia ciò che voglio effettivamente è -1, null, 0, 1-24, in modo che null sia considerato più alto di -1. So che MAX non può farlo, quindi qual è il modo più semplice per raggiungerlo?

È stato utile?

Soluzione

  

SELEZIONA weekEnd, MAX (coalesce (timeMonday, -. 5))   DA scheda attività   Raggruppa per settimana

Quindi riconvertire -.5 in null

Altri suggerimenti

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

sostituendo NULL di -0.5 quando si calcola MAX, quindi si ripristina su NULL.

(sintassi di MS SQL Server)

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

Modifica: non l'ho testato

SELECT weekEnd, REPLACE(MAX(COALESCE(timeMonday, '-0.1')), '-0.1', 'null')
FROM timesheet
GROUP BY weekEnd
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top