列がたくさんあるテーブルがあります。3 つの列は整数で、消費、消費 2、消費 3 とラベル付けされています。
テーブルの各行全体を選択したいのですが、3 つの消費フィールドの合計を降順で並べ替えます。
消費欄ごとに個別に注文できます
order by consumption3 desc, consumption 2 desc, consumption desc
しかし、これらの値を合計してから、その合計値で並べ替えたいと思います。
これを行う 4GL プログラムを作成することもできますが、これを SQL で解決しようとしています。
私がこれを行うと、
select *
from ws_bill
order by sum(consumption) + sum(consumption2) + sum(consumption3)
その場合、Informix の SQL はgroup by
リスト内のすべての列を必要とします。
これを行う簡単な方法はありますか、それともプログラムを書くだけですか?
Ubuntu 12.04 で動作する Informix SE/4GL のバージョン
ics@steamboy:~/icsdev$ dbaccess -V
DB-Access Version 7.25.UC6R1
Software Serial Number ACP#J267193
ics@steamboy:~/icsdev$ fglpc -V
Pcode Version 732-750
Software Serial Number ACP#J267193
ics@steamboy:~/icsdev$
ここに表があります:
create table "ics".ws_bill
(
yr char(2),
bill_no integer,
bill_month smallint,
due_date date,
tran_date date,
prev_reading integer,
curr_reading integer,
consumption integer,
consumption2 integer,
consumption3 integer,
water_charge money(10,2),
sewer_charge money(10,2),
other_charge decimal(10,2),
curr_bal money(10,2),
estimated char(1),
prev_due_date date,
time_billed datetime year to second,
override char(1),
curr_bal_save money(10,2)
);
revoke all on "ics".ws_bill from "public";
create unique index "ics".ws_indx on "ics".ws_bill (bill_no,yr,
bill_month);
これは、この投稿の受け入れられた回答に示されているメイン カーソルです。
declare wb_cp cursor for
select b.yr,b.bill_no,
sum(b.consumption + b.consumption2 + b.consumption3) as adj_tot
into cons_rec.* #defined record variable
from ws_bill b
where b.yr >= start_yearG and b.yr <= end_yearG
group by b.yr, b.bill_no
order by adj_tot desc, b.yr desc, b.bill_no desc