1

我有一张有一堆列的表。三列是整数,分别标记为消费、消费 2 和消费 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

您正在谈论对三列求和。这是一个简单的表达式(消费 + 消费 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 回答