2009-08-18 10 views
8

Actualmente mi instrucción SQL es la siguienteCómo agrupar los datos en cubos en Microsoft SQL

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

Y los datos de salida tiene el siguiente

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

¿Hay una instrucción SQL para que la salida parece el siguiente?

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 

Respuesta

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

Tengo esta consulta en funcionamiento ~ ¡GRACIAS! pero hay una forma más eficiente de hacerlo, porque mi rango de datos en incrementos de 25 va de 300 a 1000, y eso va a ser un montón de líneas. –

+0

La consulta de Richard debería funcionar, cambie "FROM MYTABLE)" por "FROM MYTABLE" T " –

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 

Editar: fija los valores de límites a aparecer dentro de la cubeta inferior.

+0

Lo siento, no pude hacer que esto funcione> _ < –

+0

cambie" FROM MYTABLE "a" FROM MYTABLE "T" –

+2

Fixed ¡Gracias Gordon! He sido mimado por CTE. – richardtallent

Cuestiones relacionadas