2017-05-18 1 views
0

Ich habe Anfragen geschrieben, um die Gesamtmenge von jedem Monat im Jahr 2016 zu erhalten. Dann fügte ich eine weitere Zeile namens Gesamt um die Gesamtmenge im Jahr 2016 zusammenzufassen. Aber die ordermonth im Ergebnis entpuppte sich in einem Durcheinander .Wie bekomme ich die richtige Bestellung?

Also die Frage ist, gibt es eine Möglichkeit, die ordermonth in der richtigen Reihenfolge zu setzen? Sowohl ASC als auch DESC sind in Ordnung. Danke im Voraus.

Die Abfrage, die ich geschrieben habe:

WITH CTE AS(
     SELECT CONVERT(CHAR(10), MONTH(orderdate)) AS ordermonth, SUM(qty) AS qty 
     FROM dbo.orders 
     WHERE YEAR(orderdate) = 2016 
     GROUP BY MONTH(orderdate) 
    ) 
SELECT * FROM CTE 

UNION 

SELECT 'Total', SUM(qty) 
FROM dbo.orders 
WHERE YEAR(orderdate) = 2016; 

Aktuelles Ergebnis:

ordermonth qty 
1   4134 
10   6454 
11   9780 
12   4000 
2   5548 
3   6970 
4   3543 
5   3309 
6   4251 
7   4997 
8   6134 
9   6926 
Total  66046 
+2

Die meisten Leute wollen hier formatierten Text, keine Bilder (oder Links.) – jarlh

+0

@jarlhSorry darüber. Ich habe kein Recht, das Bild direkt zu zeigen, da ich neu in SO bin. Danke für dein Verständnis. – Hannah

+0

Formatierter Text ist noch besser! – jarlh

Antwort

0

können Sie in Unterabfrage setzen und versuchen, wie unten:

select * from (
--your query including cte and union 
) a 
    order by case when a.[Month] = 'Total' then 9999 else convert(int,a.[Month]) end 
+0

Vielen Dank. Es klappt. – Hannah

0

Sie es von jjjjmm sortieren können, das ist die beste Art und Weise, auch wenn Sie mehr als einem Jahr haben werden dh

order by orderyear * 100 + ordermonth 

Oder Sie können einfach hinzufügen ‚0‘ für die richtige Reihenfolge wie folgt erhalten:

order by right('0' + cast(ordermonth as varchar(2)), 2) 
1

Zuerst können Sie tun, was Sie wollen, ohne UNION. Etwas wie dieses:

Kein CTE, das ist die gesamte Abfrage.

0

ich einen einfachen Weg gefunden, dieses Problem zu lösen, das heißt, ersetzt UNION mit UNION ALL.

WITH CTE AS(
     SELECT CONVERT(CHAR(10), MONTH(orderdate)) AS ordermonth, SUM(qty) AS qty 
     FROM dbo.orders 
     WHERE YEAR(orderdate) = 2016 
     GROUP BY MONTH(orderdate) 
    ) 
SELECT * FROM CTE 

UNION ALL 

SELECT 'Total', SUM(qty) 
FROM dbo.orders 
WHERE YEAR(orderdate) = 2016; 
Verwandte Themen