2012-04-27 8 views
5

मेरे पास एक सारणी है जिसमें लगभग 50,000 रिकॉर्ड्स शामिल हैं जो वर्तमान वित्तीय वर्ष की शुरुआत तक देखने के लिए स्थापित किए गए हैं।प्रत्येक माह के लिए एक क्षेत्र को कम से कम और गतिशील रूप से

यह खड़ा है जैसा कि मैंने के बाद से पिछले महीने तो वर्तमान में वहाँ में डेटा हम अभी भी वापस रूप में वापस दूर 1st अप्रैल देख रहे मानता 2011

टिप्पणी (जब मैं डेटा ताज़ा करते हैं, वहाँ होगा इस तालिका अद्यतन नहीं किया है केवल वहाँ में अप्रैल 2012 के डेटा हो के रूप में हम अप्रैल में अब कर रहे हैं, तो मई में यह अप्रैल 2012 और मई 2012 इतने पर है और ...)

प्रत्येक रिकॉर्ड 4 कॉलम के साथ मैं चिंतित हूँ:

Department, 
Incident date, 
month, 
year, 
reduced 

महीने और साल दोनों कॉलम तैयार किए गए हैं m घटना दिनांक क्षेत्र है जो इस प्रारूप में:

2011-06-29 00:00:00.000 

मैं करने के लिए प्रत्येक विभाग के लिए, योग कम है, लेकिन एक संचयी फैशन में की जरूरत है।

उदाहरण के लिए अप्रैल 2011 के रूप में देखा गया है कि इस समय मेरे पास सबसे पुराना महीना/वर्ष का डेटा होगा, मैं अप्रैल के लिए प्रत्येक विभाग के लिए कुल कमी जानना चाहता हूं।

फिर मई के लिए मैं अप्रैल & चाहते संयुक्त मई, जून के लिए मैं अप्रैल, मई, जून और इतने पर की आवश्यकता है ...

वहाँ इतना है कि यह करने के लिए एक बुद्धिमान तरीके के रूप में जल्द ही मैं में डेटा आयात के रूप में है इस तालिका यह एहसास होगा केवल एक महीने अब है कि वहाँ और उस वर्ष को अपडेट किया गया है और होगा के लिए अब तक अगले महीने ही अप्रैल की राशि (कम)

+0

'हादसा date' क्षेत्र के प्रकार क्या है? दिनांक समय? varchar? –

+0

@ मार्क बार्स डेटाटाइम – JsonStatham

+0

@ चयन चयन करें यहां एक नज़र डालें: - http://stackoverflow.com/questions/2120544/how-to-get-cumulative-sum –

उत्तर

1
select t1.id, t1.singlenum, SUM(t2.singlenum) as sum 

    from @t t1 inner join @t t2 on t1.id >= t2.id 
    group by t1.id, t1.singlenum 
    order by t1.id 
1

निम्नलिखित Department, Year और Month के आधार पर वर्गीकृत संचयी योग वापस आ जाएगी प्रदर्शित । यदि आप रीफ्रेशिंग करते समय पिछले कर वर्ष से डेटा साफ़ कर रहे हैं तो आप WHERE खंड को छोड़ सकते हैं।

SELECT  T1.[Year], 
      T1.[Month], 
      T1.Department, 
      SUM(T2.Reduced) ReducedTotals 
FROM  [TABLENAME] T1 
INNER JOIN [TABLENAME] T2 ON (T1.Department = T2.Department AND T1.IncidentDate >= T2.IncidentDate) 
WHERE  T1.IncidentDate >= '2012-04-01' 
GROUP BY T1.[Year], 
      T1.[Month], 
      T1.Department 
ORDER BY T1.[Year], 
      T1.[Month], 
      T1.Department 
+3

यदि आप यहां तक ​​कि दूरस्थ रूप से बड़ी संख्या में रिकॉर्ड के साथ काम कर रहे हैं, मैं टिप्पणी अनुभाग में जुड़े अन्य उत्तरों को देखने की सलाह दूंगा। किसी भी उचित मात्रा के लिए इस तरह का आधा कार्टेशियन-उत्पाद बहुत धीमा हो सकता है, इतना है कि यहां तक ​​कि एक [* खांसी *] कर्सर भी तेज हो सकता है। * [लेकिन ध्यान दें कि यह काम करता है:)] * – MatBailie

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