tags:

views:

105

answers:

2

Hi,

Currently my SQL statement is the following

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

And the output data looks like the following

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

Is there a SQL statement to make the Output look like the following?

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
+1  A: 
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
Gordon Bell
I got this query to work ~ THANKS! but is there an more efficient way to do this, because my data range in increments of 25 goes from 300 to 1000, and that is going to be a lot of lines.
Richard's query should work, change the "FROM MYTABLE)" to "FROM MYTABLE) T"
Gordon Bell
+1  A: 
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: fixed the boundary values to appear within the lower bucket.

richardtallent
Sorry, I couldn't get this to work >_<
change "FROM MYTABLE)" to "FROM MYTABLE) T"
Gordon Bell
Fixed, thanks Gordon! I've been spoiled by CTEs.
richardtallent