2013-06-24 18 views
6

とSQLで、私は、ストアドプロシージャとselect文を持っている:注文合計

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) 

これは、毎月 ための総和を示ししかし、私は月と年で結果を注文する必要があります私の結果だってのように示す:

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

ありがとうございますGreat .. :))Perfect – 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) 

または

あなたは月、2月と注文したい場合は、この

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

おかげで私はこれを試してみましたが、まだ1月.....私は、クエリを編集した – Bruce

+0

...今チェックして、私は – Ravi

+0

をお知らせ2月、同じ結果4月を与え申し訳ありませんが、この場合は、fnでお願いしますグループ内にMONTH(OrderDate)がないので、fn MONTHNAME(OrderDate)の代わりにそれを使うといいですが、数字ではなく月の名前を表示する必要があります。 – 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

私はこれを試して、私はこのエラーが表示されます:列 "Order.OrderDate"はORDERで無効ですBY句は、集計関数またはGROUP BY句のいずれにも含まれていないためです。 – Bruce

+0

ありがとう、はいそれは私の結果が月の番号を表示していない場合の例です:) – Bruce

+0

@Ryanあなたは 'SELECT'部分にそれを置く必要はありません、あなたは' GROUP BY ' –

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) 

をあなたは月ごとにご注文いただいた場合、別途年間、それはアルファベット順(1月前4月)の月の昇順になります。あなたが注文日付で注文した場合、idは月/年で注文された日付値に基づいて注文されます。

+0

あなたの目的に合っているかどうか教えてください!! – user2407394

+0

これは、orderbyフィールドがグループの句 –

+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

こんにちは、OPがあなたの洞察を理解できるように少しあなたの答えを説明できますか?かなりお待ちください。 – 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

これを試してみてください。それは完全に動作します。すでに年の値を入力していることに注意してください。一度に1年しか選択できないので、Yearを注文したりグループ化する必要はありません。したがって、余分なコードは必要ありません。

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) 
関連する問題