2009-08-18 23 views
8

Hiện nay câu lệnh SQL của tôi là sauLàm thế nào để dữ liệu nhóm vào xô trong Microsoft SQL

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

Và các dữ liệu đầu ra trông giống như sau

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

Có một câu lệnh SQL để làm cho đầu ra trông giống như sau?

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 

Trả lời

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

Tôi nhận được truy vấn này để hoạt động ~ CẢM ƠN! nhưng có một cách hiệu quả hơn để làm điều này, bởi vì phạm vi dữ liệu của tôi trong gia số 25 đi từ 300 đến 1000, và đó sẽ là rất nhiều dòng. –

+0

Truy vấn của Richard sẽ hoạt động, thay đổi "FROM MYTABLE)" thành "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: cố định các giá trị ranh giới để xuất hiện trong xô thấp hơn.

+0

Xin lỗi, tôi không thể làm việc này> _ < –

+0

thay đổi "FROM MYTABLE)" thành "FROM MYTABLE) T" –

+2

Đã sửa lỗi , cảm ơn Gordon! Tôi đã bị các CTEs hư hỏng. – richardtallent

Các vấn đề liên quan