2012-07-11 13 views
8

मैं इस उदाहरण डेटा है:एसक्यूएल समूह के आधार पर - डालने पर प्रति माह/वर्ष, त्रुटि गिनती रिकॉर्ड - नहीं मान्य महीना

Country | Members | Joined 
USA  | 250  | 1/1/2012 
USA  | 100  | 1/8/2012 
Russia | 75  | 1/20/2012 
USA  | 150  | 2/10/2012 

मैं एक में सभी रिकॉर्ड एकीकृत करना चाहते हैं जब मैं इस डेटा को क्वेरी दिया गया महीना

Country | Members | Joined 
USA  | 350  | 1/2012 
Russia | 75  | 1/2012 
USA  | 150  | 2/2012 

एक चयन के रूप में है कि काफी सरल है: जैसी क्वेरी का परिणाम लगेगा,

select country, count(*) as members , to_char(trunc(joined), 'MM-YYYY') 
from table 
group by country, to_char(trunc(joined), 'MM-YYYY') 

कि क्वेरी प्रारूप मैं चाहता हूँ में मुझे डेटा दे देंगे लेकिन मेरा मुद्दा यह है कि जब मैं एक नई पिवट तालिका में डालने के लिए मुझे एक त्रुटि मिलती है क्योंकि चयन कथन में to_char() को DATETIME कॉलम में रखा जा रहा है (त्रुटि: ओआरए -01843 - वैध माह नहीं)

जब मैं to_char को बदलता हूं() to_date() के चयन में, यह अभी भी काम नहीं करता है (एक ही त्रुटि, ओआरए -01843 - नहीं वैध महीने):

select country, count(*) as members, to_date(trunc(joined), 'MM-YYYY') 
from table 
group by country, to_date(trunc(joined), 'MM-YYYY') 

कैसे इस तरह से है कि मैं एक नई तालिका जिसका में परिणाम सम्मिलित कर सकते हैं में इस क्वेरी को संशोधित करने पर कोई सुझाव "शामिल" स्तंभ प्रकार DATETIME की है?

किसी भी सुझाव/सुझाव/टिप्पणियों के लिए अग्रिम धन्यवाद!

उत्तर

14

आप to_date('01/'||trunc(joined), 'DD/MM/YYYY') जैसे कुछ कर सकते हैं, जो इसे पहले वैध तिथि में बदल देगा। तुम बस महीने के पहले या आखिरी दिन का उपयोग करने के लिए कि क्या निर्णय लेना होगा कि (पिछले अधिक जटिल है)

एक अन्य विकल्प EXTRACT समारोह का उपयोग करने के लिए है:

select country, count(*) as members, EXTRACT(MONTH FROM joined) as mn, EXTRACT(YEAR FROM JOINED) as yr,MIN(JOINED) as dt 
from table 
group by country, EXTRACT(MONTH FROM joined), EXTRACT(YEAR FROM JOINED) 

और फिर उस से, आप कर सकते थे बस डीटी कॉलम का चयन करें और इसे

+0

मेरे सिर में यह वास्तव में क्या मैं पता लगाने की कोशिश कर रहा था। बहुत धन्यवाद! –

5

आपको महीने के पहले दिन की तारीख को कम करने के लिए trunc फ़ंक्शन का उपयोग करना चाहिए। इससे तारीख को एक स्ट्रिंग में रूपांतरण और स्ट्रिंग को किसी तारीख में बदलने की आवश्यकता समाप्त हो जाती है।

select country, 
     count(*) as members , 
     trunc(joined, 'MM') 
    from table 
group by country, 
      trunc(joined, 'MM') 
+0

अच्छा सुझाव, मैं इसमें देख लूंगा। मैं आपकी प्रतिक्रिया की सराहना करता हूं –

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