2009-08-18 7 views
8

Attualmente la mia dichiarazione di SQL è il seguenteCome raggruppare i dati in secchi in Microsoft SQL

SELECT NAME, ROUND([DR# BASE]/DAYS_WORKED,0) AS 'BASE/DAY' 
FROM MYTABLE 

E i dati di output è simile al seguente

NAME BASE/DAY 
James 300 
Jane 310 
Jim 313 
John 325 
Jonah 400 

C'è un'istruzione SQL per rendere l'output sembra il seguente?

NAME BUCKET BASE/DAY 
James 300 <= 325 300 
Jane 300 <= 325 310 
Jim 300 <= 325 313 
John 300 <= 325 325 
Johnny 325 <= 350 329 
Jonah 350 <= 400 400 

risposta

9
SELECT NAME, 
CASE WHEN [BASE/DAY] <= 325 THEN '300 <= 325' 
    WHEN [BASE/DAY] <= 350 THEN '325 <= 350' 
    WHEN [BASE/DAY] <= 400 THEN '350 <= 400' 
END AS BUCKET, 
[BASE/DAY] 
FROM 
(
    SELECT NAME, ROUND([DR# BASE]/DAYS_WORKED,0) AS 'BASE/DAY' FROM MYTABLE 
) T 
ORDER BY 1, 2, 3 
+1

Ho ottenuto questa query per funzionare ~ GRAZIE! ma c'è un modo più efficiente per farlo, perché i miei dati variano in incrementi di 25 vanno da 300 a 1000, e questo sarà un sacco di linee. –

+0

La query di Richard dovrebbe funzionare, cambiare "FROM MYTABLE" in "FROM MYTABLE)" –

5
SELECT NAME, 
    [BASE/DAY], 
    CAST(([BASE/DAY]-1)/25) * 25 AS varchar(20)) + ' <= ' + 
    CAST(([BASE/DAY]-1)/25 + 1) * 25 AS varchar(20)) As Bucket, 
FROM 
    (SELECT Name, ROUND([DR# BASE]/DAYS_WORKED,0) AS [BASE/DAY] 
     FROM MYTABLE) T 

Edit: ha fissato i valori limite per apparire all'interno del secchio inferiore.

+0

Spiacente, non ho potuto farlo funzionare> _ < –

+0

modificare "DA MIOBILE" "su" DA MIOBILE) T " –

+2

Risolto , grazie Gordon! Sono stato rovinato dai CTE. – richardtallent

Problemi correlati