1

列がたくさんあるテーブルがあります。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
4

3 に答える 3

2

あなたは3つの列を合計することについて話している. これは単純な式 (消費 + 消費 2 + 消費 3) です。グループ化する複数の行を合計する場合を除き、sum(...) 関数は必要ありません。

したがって、次の行に沿ったものが必要です。

select bill_no, bill_month, ..., (consumption + consumption2 + consumption3) as tot_sum
  from ws_bill
 order by tot_sum desc
于 2013-01-24T18:38:19.643 に答える
0
select  *, (sum(consumption) + sum(consumption2) + sum(consumption3)) as tot_sum
from ws_bill
order by tot_sum desc
于 2013-01-24T17:19:45.017 に答える
0

どのバージョンの Informix を使用していますか? テーブルに一意の識別子があり、informx のバージョンがサブクエリをサポートしていると仮定して、次のことを試してください。

SELECT *
FROM ws_bill w 
   JOIN (
      SELECT id, sum(consumption) + sum(consumption2) + sum(consumption3) as tot
      FROM ws_bill
      GROUP BY id
   ) w2 on w.id = w2.id
ORDER BY tot DESC

幸運を。

于 2013-01-24T17:34:19.527 に答える