2013-06-24 14 views
6

साथ एसक्यूएल में साल मैं एक संग्रहीत प्रक्रिया और बयान का चयन किया है:आदेशानुसार महीने और योग

SELECT  { fn MONTHNAME(OrderDate) } AS MonthName, YEAR(OrderDate) AS Year, SUM(TotalValue) AS Profits 
FROM   [Order] 
WHERE  (YEAR(OrderDate) = @year) 
GROUP BY { fn MONTHNAME(OrderDate) }, YEAR(OrderDate) 

इस हर महीने के लिए कुल योग दर्शाता है लेकिन मैं महीने और वर्ष से परिणाम ऑर्डर करने के लिए की जरूरत है coz मेरा परिणाम दिखाया गया है:

April 2013 
February 2013 
January 2013 
June 2013 
March 2013 
May 2013 

ऐसे मामले में समाधान क्या है?

उत्तर

4

इस प्रयास करें:

SELECT  { fn MONTHNAME(OrderDate) } AS MonthName, YEAR(OrderDate) AS Year, SUM(TotalValue) AS Profits 
FROM   [Order] 
WHERE  (YEAR(OrderDate) = @year) 
GROUP BY { fn MONTHNAME(OrderDate) }, MONTH(OrderDate), YEAR(OrderDate) 
order by Year(orderDate),month(OrderDate) 

नोट आप क्वेरी यह आप के लिए काम करेंगे के बाद

+0

धन्यवाद जो महान काम करता है .. :)) बिल्कुल सही – Bruce

1

मुझे लगता है कि आप अंत

SELECT  { fn MONTHNAME(OrderDate) } AS MonthName, YEAR(OrderDate) AS Year, SUM(TotalValue) AS Profits 
FROM   [Order] 
WHERE  (YEAR(OrderDate) = @year) 
GROUP BY { fn MONTHNAME(OrderDate) }, YEAR(OrderDate) 
ORDER BY { fn MONTH(OrderDate) }, YEAR(OrderDate) 

या

आप इस

SELECT  CASE { fn MONTH(OrderDate) } 
      when 0 then 'JAN' 
      when 1 then 'FEB' 
      when 2 then 'MAR' 
      when 3 then 'APR' 
      when 4 then 'MAY' 
      when 5 then 'JUN' 
      when 6 then 'JUL' 
      when 7 then 'AUG' 
      when 8 then 'SEP' 
      when 9 then 'OCT' 
      when 10 then 'NOV' 
      when 11 then 'DEC' 
      END 
     AS MonthName, YEAR(OrderDate) AS Year, SUM(TotalValue) AS Profits 
    FROM   [Order] 
    WHERE  (YEAR(OrderDate) = @year) 
    GROUP BY { fn MONTH(OrderDate) }, YEAR(OrderDate) 
    ORDER BY { fn MONTH(OrderDate) }, YEAR(OrderDate) 
+0

धन्यवाद लेकिन खेद है कि मैं इस की कोशिश की है और अभी भी एक ही परिणाम अप्रैल तो फरवरी जनवरी ..... – Bruce

+0

मैं अपने प्रश्न संपादित किया है ... अब जाँच करें और मुझे पता है – Ravi

+0

जाने देना इस मामले fn में धन्यवाद महीने में मॉन्थ (ऑर्डरडेट) नहीं है, इसलिए मेरे पास एफएन मॉन्थनाम (ऑर्डरडेट) की जगह है, लेकिन यह अच्छा काम है, लेकिन मुझे महीने का नाम नंबर दिखाने की ज़रूरत नहीं है .. – Bruce

1

की तरह कर सकते हैं आप के रूप में जन, फर ऑर्डर करने के लिए चाहते हैं, मार्च उपयोग पर order by खंड का उपयोग करना चाहिए

SELECT 
    month(OrderDate) MonthName, 
    year(OrderDate) Year, 
    sum(TotalValue) Profits 
FROM   
    [Order] 
WHERE  
    month(OrderDate) = @year 
ORDER BY 
    year(OrderDate), 
    month(OrderDate) 
GROUP BY 
    year(OrderDate), 
    month(OrderDate) 
+0

मैंने कोशिश की और मुझे यह त्रुटि मिली: कॉलम "ऑर्डर। ऑर्डरडेट" ऑर्डर में अमान्य है खंड के कारण क्योंकि यह या तो कुल कार्य या ग्रुप बाय क्लॉज में निहित नहीं है। – Bruce

+0

धन्यवाद, हाँ यह काम करता है और इस मामले में मेरा परिणाम महीने का नाम नहीं दिखाता है :) – Bruce

+0

@Ryan आपको इसे 'SELECT' भाग में रखने की आवश्यकता नहीं है, आपको क्लॉज द्वारा' ग्रुप बाय 'में कोई ऑर्डर देना होगा ' –

0

बस

Order by max(OrderDate) 

अंत में जोड़ें।

SELECT  { fn MONTHNAME(OrderDate) } AS MonthName, YEAR(OrderDate) AS Year,  SUM(TotalValue) AS Profits 
FROM   [Order] 
WHERE  (YEAR(OrderDate) = @year) 
GROUP BY { fn MONTHNAME(OrderDate) }, YEAR(OrderDate) 
Order by max(OrderDate) 

अब यह कैसे काम करता है:

आप महीने के द्वारा आदेश हैं, तो साल अलग से, यह वर्णमाला के क्रम में महीने के आरोही क्रम (जनवरी से पहले अप्रैल) में जाना होगा। यदि आप आदेश दिनांक आईडी द्वारा आदेश दिनांक दिनांक के आधार पर आदेश दिया जाएगा जो निश्चित रूप से महीने/वर्ष के अनुसार आदेश दिया जाता है।

+0

मुझे बताएं कि यह आपके उद्देश्य की सेवा करता है .. !! – user2407394

+0

यह काम नहीं करेगा क्योंकि ऑर्डरबी फ़ील्ड को समूह –

+0

द्वारा समूह में होना आवश्यक है, धन्यवाद, मेरा जवाब .. !! – user2407394

0

उपयोग खंड द्वारा किसी भी खेतों आप समूह में से आदेश दे रहे हैं जोड़ने की जरूरत है।

SELECT  { fn MONTHNAME(OrderDate) } AS MonthName, datepart(MM,OrderDate)      AS Month, YEAR(OrderDate) AS Year, SUM(TotalValue) AS Profits 
FROM   [Order] 
WHERE  (YEAR(OrderDate) = @year) 
GROUP BY { fn MONTHNAME(OrderDate) }, YEAR(OrderDate),  datepart(MM,**OrderDate**) 
ORDER BY datepart(MM,**OrderDate**) 
+1

हाय, क्या आप अपना उत्तर थोड़ा सा समझा सकते हैं ताकि ओपी आपकी अंतर्दृष्टि को समझ सके? मान जाओ ना। – bufh

0
select 
cast(year(appointmentdate) as char(4))+''+ 
case when len(cast(month(appointmentdate)as char(2)))=1 
then '0'+cast( month(appointmentdate) as char(2)) else cast(month(appointmentdate) as char(2))end as apporder 
from timeslots 
group by appointmentdate 
order by appOrder 
0

इस प्रयास करें। यह पूरी तरह से काम करता है। ध्यान दें कि आप पहले से ही एक वर्ष मूल्य दर्ज कर रहे हैं। इसलिए आपको ऑर्डर करने या समूह करने की आवश्यकता नहीं है क्योंकि आप एक समय में केवल एक वर्ष का चयन कर सकते हैं। तो अतिरिक्त कोड की आवश्यकता नहीं है।

SELECT { fn MONTHNAME(OrderDate) } AS MonthName, SUM(TotalValue) AS Profits 
FROM [Order] 
WHERE (YEAR(OrderDate) = @year) 
GROUP BY { fn MONTHNAME(OrderDate) }, DATEPART(M, OrderDate) 
ORDER BY DATEPART(M, OrderDate) 
संबंधित मुद्दे