2009-08-18 2 views
8

В настоящее время моего SQL заявление выглядит следующим образомКак группировать данные в ведро в Microsoft SQL

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

И выходные данные выглядит следующим образом

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

Есть SQL заявление, чтобы сделать вывод выглядите следующим образом?

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 

ответ

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

У меня этот запрос работает ~ СПАСИБО! но есть ли более эффективный способ сделать это, потому что мой диапазон данных с шагом 25 идет от 300 до 1000, и это будет много строк. – 2009-08-19 17:24:48

+0

Запрос Ричарда должен работать, изменить «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: фиксированный граничных значения появляется в нижнем ведре.

+0

Извините, я не мог заставить это работать> _ < – 2009-08-19 17:23:29

+0

изменить" FROM MYTABLE "" на "FROM MYTABLE) T" –

+2

Исправлено , спасибо Гордон! Я был испорчен CTE. – richardtallent

Смежные вопросы