2017-12-15 28 views
1

私は月と年の抽出列を含むいくつかの列でグループ化しようとしています。 sqlは、元の日付列でグループを戻し続けます。月と年に日付を抽出し、次にこの列をグループ化するにはどうすればいいですか?以下は私の完全なSQLです:group by extract sql

select Name, 
extract(month from fill_Date) as Month, 
extract(year from fill_Date) as Year, 
sum(quantity) 
from Table A 
group by Name,fill_Date 
+1

'fill_Date'の代わりに 'Group By'に' extract(Month from fill_Date)、extract(year from fill_Date) 'を入れてください。 –

答えて

0

あなたがグループ・バイ節でextract()通話繰り返すことができます:

select Name, 
    extract(month from fill_Date) as Month, 
    extract(year from fill_Date) as Year, 
    sum(quantity) 
from TableA 
group by Name, 
    extract(month from fill_Date), 
    extract(year from fill_Date) 

または使用、その後、値を抽出するために、サブクエリ(インライン・ビュー)またはCTEを使用します

select Name, 
    Month, 
    Year, 
    sum(quantity) 
from (
    select Name, 
    extract(month from fill_Date) as Month, 
    extract(year from fill_Date) as Year, 
    quantity 
    from TableA 
) 
group by Name, 
    Month, 
    Year 
:それは定義されていて、クエリの同じレベルで列の別名を参照することはできませんが、サブクエリがそれを意味 は同じレベルではありません - 列グループのエイリアス

あなたはもちろん、年と月を別々に抽出する必要はありませんが、もちろんそうかもしれません。あなたの目標は年/月の組み合わせによってちょうどグループにある場合、あなたはそれではなく、そのことによって、列値、およびグループの一日と任意の時間の部分を無視するためにtrunc()機能を使用することができます。

select Name, 
    to_char(trunc(fill_Date, 'MM'), 'MM YYYY') as month, 
    sum(quantity) 
from TableA 
group by Name, 
    trunc(fill_Date, 'MM') 

trunc(fill_Date, 'MM')ができますあなたはその月の初日に真夜中になります。選択リストのto_char()を使用すると、月と年だけが表示されますが、現在は単一の列になりますが、2つの数字ではなく文字列として表示されます。グループウェアでto_char()を使用できますが、そうする必要はありません。