it-swarm.com.de

Auftrag Nach Monat und Jahr in sql mit Summe

Ich habe eine gespeicherte Prozedur und die select-Anweisung lautet:

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)

dies zeigt die Gesamtsumme für jeden Monat Aber ich muss das Ergebnis nach Monat und Jahr sortieren, da mein Ergebnis wie folgt angezeigt wird:

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

Was ist die Lösung in einem solchen Fall?

8
Bruce

Versuche dies:

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)

Beachten Sie, dass Sie der group by-Klausel alle Felder hinzufügen müssen, nach denen Sie bestellen

9
Bob Vale

Einfach hinzufügen 

Order by max(OrderDate) 

am Ende.

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) 

Nun wie es funktioniert:

Wenn Sie nach Monat und Jahr separat bestellen, wird der Monat in aufsteigender Reihenfolge in alphabetischer Reihenfolge (April vor Januar) angezeigt. Wenn Sie nach Auftrag bestellen, wird die ID anhand eines Datumswertes bestellt, der natürlich nach Monat/Jahr geordnet ist.

1
user2407394

Ich denke, Sie sollten am Ende die Klausel order by verwenden 

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)

oder 

das kannst du so machen

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)
1
Ravi

Wenn Sie als Jan, Feb, März bestellen möchten, nutzen Sie bitte 

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)
1
Ryan

Verwendung Die folgende Abfrage funktioniert für Sie.

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**)
0
Chandni Devi

Versuche dies. Es funktioniert perfekt. Beachten Sie, dass Sie bereits einen Jahreswert eingeben. Sie müssen also kein Jahr bestellen oder gruppieren, da Sie jeweils nur ein Jahr auswählen können. Der zusätzliche Code wird also nicht benötigt.

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)
0
Emz
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
Ravikumar Reddy