2015-08-06 17 views
6

Tôi có bảng này trong SQL Server:dữ liệu Nhóm trên SQL Server

Year Month  Quantity 
---------------------------- 
2015 January  10 
2015 February 20 
2015 March  30 
2014 November 40 
2014 August  50 

Làm thế nào tôi có thể xác định những năm khác nhau và tháng thêm hai cột hơn là nhóm các năm cùng với một số lượng và tháng sau đó khác nhau trong tuần tự cách như ví dụ

Year Month  Quantity Group Subgroup 
------------------------------------------------ 
2015 January  10   1  1 
2015 February 20   1  2 
2015 March  30   1  3 
2014 November 40   2  1 
2014 August  50   2  2 

Trả lời

5

bạn có thể sử dụng DENSE_RANK để tính toán các nhóm dành cho bạn:

SELECT t1.*, DENSE_RANK() OVER (ORDER BY Year DESC) AS [Group], 
    DENSE_RANK() OVER (PARTITION BY Year ORDER BY DATEPART(month, Month + ' 01 2010')) AS [SubGroup] 
FROM t1 
ORDER BY 4, 5 

Xem điều này fiddle.

0

Để kết hợp nhóm và phân nhóm với một số bạn có thể làm điều này:

WITH RankedTable AS (
    SELECT year, month, quantity, 
    ROW_NUMBER() OVER (partition by year order by Month) AS rn 
    FROM yourtable) 
SELECT year, month, quantity, 
    SUM (CASE WHEN rn = 1 THEN 1 ELSE 0 END) OVER (ORDER BY YEAR) as year_group, 
    rn AS subgroup 
FROM RankedTable 

đây ROW_NUMBER() OVER khoản tính toán hạng của một tháng trong vòng một year. Và SUM() ... OVER tính chạy SUM cho những tháng với cấp bậc 1.

SQL Fiddle

+0

nó nên làm việc trên SQL 2008? nếu tôi có một cột thứ ba để nhóm thì sao? nó sẽ không hoạt động đúng không? – cmonti

+0

nó hoạt động trên SQL 2008 – Bulat

+0

Tôi không thể làm cho nó hoạt động như thế trong máy chủ sql 2008 – cmonti

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