2017-12-18 5 views
0

Oracleで月日をグループ化し、これらをきちんと並べるクエリを作成しようとしています。 これ以外にも月は月の数字ではなく名前が表示されていなければなりません。私は現在持っているOracleグループ月、年、年別、月別

クエリは次のとおりです。

SELECT to_char(datumgeleend, 'MONTH') as "Maand geleend", 
to_char(datumgeleend, 'YYYY') as "Jaar geleend", SUM(bedrag) 
FROM lening 
GROUP BY to_char(datumgeleend, 'MONTH'), to_char(datumgeleend, 'YYYY') 
ORDER BY to_char(datumgeleend, 'YYYY'), to_char(datumgeleend, 'MONTH') DESC; 

問題があり、その月の最初の文字ではなく、月の数の作品によって順序。

だから、私はわずかにクエリを調整したいことを解決するために考えた:WITHファクタリング句を使用して、

ORA-00979: not a GROUP BY expression 

答えて

1

ただ、group by句にextract(month from datumgeleend)を追加します。

SELECT to_char(datumgeleend, 'MONTH') as "Maand geleend", 
to_char(datumgeleend, 'YYYY') as "Jaar geleend", SUM(bedrag) 
FROM lening 
GROUP BY to_char(datumgeleend, 'MONTH'), to_char(datumgeleend, 'YYYY'), extract(month from datumgeleend) 
ORDER BY to_char(datumgeleend, 'YYYY'), extract(month from datumgeleend) DESC; 
+0

ああ、それは完璧に仕事をする!私はそれがGROUP BYにも入れなければならないことを理解していませんでした。結局私はそれを正しく並べ替えるためにDESCを取り除かなければならなかったが、それは質問とは関係がなかった:)あなたの答えをありがとう! –

0

簡単な回避策:

SELECT to_char(datumgeleend, 'MONTH') as "Maand geleend", 
to_char(datumgeleend, 'YYYY') as "Jaar geleend", SUM(bedrag) 
FROM lening 
GROUP BY to_char(datumgeleend, 'MONTH'), to_char(datumgeleend, 'YYYY') 
ORDER BY to_char(datumgeleend, 'YYYY'), extract(month from datumgeleend) 
DESC; 

悲しいことに、このクエリは、次のエラーを生成、追加の列(GROUP BY句に含める必要があります)を使用してデータをソートします。

WITH temp AS (
    SELECT 
    TO_CHAR(datumgeleend,'MONTH') AS maand_geleend, 
    TO_CHAR(datumgeleend,'YYYY') AS jaar_geleend, 
    SUM(bedrag) sum_bedrag, 
    -- 
    TO_CHAR(datumgeleend,'yyyymm') yyyymm 
    FROM 
    lening 
    GROUP BY 
    TO_CHAR(datumgeleend,'MONTH'), 
    TO_CHAR(datumgeleend,'YYYY'), 
    TO_CHAR(datumgeleend,'yyyymm') 
) SELECT 
    maand_geleend, 
    jaar_geleend, 
    sum_bedrag 
    FROM 
    temp 
ORDER BY 
    yyyymm DESC; 
+0

Oohのおかげを対応策については、良いことが可能であることを知っている:D私は答えとしてのためにそれを容易にすることを選んだので、他のソリューションはいえ単純でした同様の問題を抱える他の人たち! ありがとうございました! –