2009-08-18 10 views
8

Actuellement, mon instruction SQL est la suivanteComment regrouper les données dans des seaux dans Microsoft SQL

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

Et les données de sortie ressemble à la

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

Y at-il une instruction SQL pour rendre la sortie ressemble à ce qui suit?

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 

Répondre

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

J'ai eu cette requête pour travailler ~ MERCI! mais y a-t-il un moyen plus efficace de le faire, parce que ma gamme de données par tranches de 25 va de 300 à 1000, et cela va être beaucoup de lignes. –

+0

La requête de Richard devrait fonctionner, changer "FROM MYTABLE)" à "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 

Edit: fixer les valeurs limites pour apparaître à l'intérieur du godet inférieur.

+0

Désolé, je ne pouvais pas obtenir ce travail> _ < –

+0

changer "FROM MYTABLE)" à "FROM MYTABLE) T" –

+2

Fixe , merci Gordon! J'ai été gâté par des CTE. – richardtallent

Questions connexes