2015-08-06 7 views
6

मैं एसक्यूएल सर्वर में इस तालिका है:समूहीकरण डेटा

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

मैं अलग-अलग वर्षों और महीनों दो और स्तंभों कि समूह एक नंबर के साथ एक ही साल और उसके बाद अलग महीनों अनुक्रमिक में जोड़ने की पहचान कैसे कर सकते हैं उदाहरण की तरह जिस तरह से

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 

उत्तर

5

आप DENSE_RANK का उपयोग आप के लिए समूहों की गणना करने के कर सकते हैं:

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 

यह fiddle देखें।

0

एक नंबर पर आप यह कर सकते हैं के साथ समूह और उप समूह संबद्ध करने के लिए:

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 

यहाँ ROW_NUMBER() OVER खंड एक year भीतर एक महीने के पद गणना करता है। और SUM() ... OVER रैंक 1.

SQL Fiddle

+0

साथ महीनों के लिए योग चल रहा है की गणना यह एसक्यूएल 2008 को काम करना चाहिए? अगर मेरे पास समूह के लिए तीसरा कॉलम है तो क्या होगा? यह सही काम नहीं करेगा? – cmonti

+0

यह SQL 2008 – Bulat

+0

पर काम करता है मैं इसे SQL Server 2008 – cmonti

संबंधित मुद्दे