グループ別に並べ替えて月単位でソートしようとしています。私はto_char(date_field, 'Month') as month
を使用して月を日付の代わりに文字列として取得しています。これにより、結果には年代順ではなくアルファベット順にソートされた月があります。生成エイリアス化された列に対してto_date()を使用できません。
select fac.facility_cd,
fac.name,
to_char(oh.create_date, 'Month') as month,
count(ol.ord_line_id) as number_orders,
sum(ol.retail_price) as total
from ord_header oh
join ord_line ol using(ord_id)
join ord_subline os using(ord_line_id)
join facility fac using(facility_cd)
group by 1, 2, 3
order by 1, 2, 3;
:
fac_cd | name | month | number_orders | total
-------+------------------------------------------+-----------+---------------+------------------
502 | ART FURNITURE CO | December | 1 | 1099
503 | ABCOASTER | December | 5 | 144.75
503 | ABCOASTER | January | 4 | 115.8
503 | ABCOASTER | November | 2 | 57.9
205 | CHAR-GRILLER (A&J MFG LLC) | April | 6 | 424
205 | CHAR-GRILLER (A&J MFG LLC) | August | 29 | 4786
205 | CHAR-GRILLER (A&J MFG LLC) | December | 21 | 2397.98
205 | CHAR-GRILLER (A&J MFG LLC) | February | 5 | 525
205 | CHAR-GRILLER (A&J MFG LLC) | January | 2 | 148
205 | CHAR-GRILLER (A&J MFG LLC) | July | 16 | 1504
205 | CHAR-GRILLER (A&J MFG LLC) | June | 18 | 1762
205 | CHAR-GRILLER (A&J MFG LLC) | March | 10 | 720
は数ヶ月はアルファベット順であることに注意してください。私は答えのためにSO検索が、私はこの問題を解決しようとすると、私が試した:私もこの試みた
ERROR: function to_date(integer, unknown) does not exist
LINE 11: order by 1, 2, to_date(3, 'Month');
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
:エラー与え
order by 1, 2, to_date(3, 'Month');
order by 1, 2, extract('Month' from oh.create_date);
をどのこのエラーが返されます:
ERROR: column "oh.create_date" must appear in the GROUP BY clause or be used in an aggregate function
LINE 11: order by 1, 2, extract('Month' from oh.create_date);
^
どのようにしてこのクエリを変更し、発生した順序で月を注文できますか?
'順:今日:)
EDIT
ないようなクリーンな方法が、何かがトリックを行う必要がありますe_date) '? –
@vkp残念ながら、 'ERROR:column" oh.create_dateはGROUP BY句に現われなければならない、あるいは集約関数で使われなければならないと言います。 'month'(エイリアス)と' 3'を使って 'month 'しかし、役に立たない。 – Will