2009-08-18 1 views
8

Obecnie moja instrukcja SQL jest następującyJak dane grupy w wiadrach w Microsoft SQL

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

a dane wyjściowe wygląda następującym

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

Czy istnieje instrukcja SQL, aby Output wyglądają następująco?

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 

Odpowiedz

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

Mam to zapytanie do pracy ~ DZIĘKI! ale czy jest na to skuteczniejszy sposób, ponieważ mój zakres danych w krokach 25 wynosi od 300 do 1000, a to będzie dużo linii. –

+0

Zapytanie Richarda powinno zadziałać, zmienić "Z MOJEGO TABELA" na "Z MYTABEGO" 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: stałe wartości graniczne pojawiają się w dolnym segmencie.

+0

Niestety, nie mogłem uzyskać tego do pracy> _ < –

+0

zmienić" Z MYTABLE) "na" Z MYTABLE) T " –

+2

Naprawiono , dzięki Gordon! Zostałem rozpieszczony przez CTE. – richardtallent