2013-01-24 6 views
1

나는 한 무리의 테이블이있다. 세 개의 열은 정수이고 소비, 소비 2 및 소비 3으로 분류됩니다.함수 (합계)의 결과로 선택을 주문하려면 어떻게해야합니까?

테이블의 각 행을 선택하고 싶지만 내림차순 세 소비 필드의 합계로 선택을 주문하고 싶습니다.

I는 각각의 소비 열을 개별적

order by consumption3 desc, consumption 2 desc, consumption desc 

하여 주문할 수 있지만, 그 합산 값이 다음 값과 순서를 합산하는 것을 선호한다.

이 작업을 수행하는 4GL 프로그램을 작성할 수도 있지만 SQL에서이 문제를 해결하려고합니다.

내가 이렇게하면

,

select * 
from ws_bill 
order by sum(consumption) + sum(consumption2) + sum(consumption3) 

는 인포믹스의 SQL은 group by 목록에있는 모든 열을 원한다.

더 쉬운 방법이 있나요? 아니면 방금 프로그램을 작성해야합니까?

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); 

는이 게시물에 대한 허용 대답에 표시된대로 주요 커서입니다 : 인포믹스 SE/4GL의

버전은 여기

[email protected]:~/icsdev$ dbaccess -V 
DB-Access Version 7.25.UC6R1 
Software Serial Number ACP#J267193 
[email protected]:~/icsdev$ fglpc -V 

Pcode Version 732-750 

Software Serial Number ACP#J267193 
[email protected]:~/icsdev$ 

우분투 12.04에서 실행되는 테이블입니다 .

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 
+0

당신은 인포믹스 - SE (표준 엔진)을 사용하고 있음을 감안할 때 오히려 인포믹스 (동적 서버) 이상을, 당신은 알고 있어야합니다 FROM 절의 하위 쿼리 및 ANSI 스타일의 JOIN 작업과 같은 최신 SQL의 예의 많은 기능을 제공합니다. 작업을 수행 할 수 있지만 여기에서 질문하는 경우 Informix-SE를 언급해야합니다. 그렇지 않으면 Informix 11.70에서는 작동하지만 Informix-SE 7.25에서는 작동하지 않을 수있는 응답을받을 수 있습니다. (실제로, 틀린 답을 얻을 수도 있지만 문제를 해결하는 데 도움이 될 것입니다.) –

+0

맞습니다. 나는 최고 소비 계정의 정확한 수를 얻고 있지 않았다. 결국, 세 가지 소비 분야에서 내림차순으로 정렬 된 4GL 프로그램을 작성한 후 다음 회계 연도를 마칠 때까지 상위 10 개 계정이 발견 된 후 계속 foreach를 사용했습니다. – octopusgrabbus

답변

2

세 개의 열을 합산하는 것에 대해 이야기하고 있습니다. 이것은 간단한 표현식입니다 (소비 + 소비 2 + 소비 3). 그룹화중인 여러 행을 합계하지 않으려면 sum (...) 함수가 필요하지 않습니다.

그래서, 당신이이 라인을 따라 뭔가가 필요 : SE가 지원하지 않는

select bill_no, bill_month, ..., (consumption + consumption2 + consumption3) as tot_sum 
    from ws_bill 
order by tot_sum desc 
0
select *, (sum(consumption) + sum(consumption2) + sum(consumption3)) as tot_sum 
from ws_bill 
order by tot_sum desc 
+1

결국 목록 select *, (sum (소비) + sum (소비 2) + sum (소비 3))로 tot_sum으로에서 ws_bill order by tot_sum desc#^ # 294로 그룹의 모든 열이 필요합니다.)는 GROUP BY 목록에 있어야합니다. # 원래 게시물에 표를 다시 추가했습니다. – octopusgrabbus

0

당신이 사용하는 인포믹스의 버전은 무엇? 테이블을 가정 고유 식별자를 가지고 있으며, 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 

행운을 빕니다.

+0

감사합니다. 여기에 요청한 정보가 있습니다. 원래 게시물에 추가하겠습니다. 조인은 구문 오류를 던졌지 만 계속 살펴볼 것입니다. steamboy @ ICS : ~/icsdev $ dbaccess를 -V steamboy @ DB-액세스 버전 7.25.UC6R1 소프트웨어 일련 번호 ACP 번호의 J267193 ICS : ~/icsdev $ fglpc -V PCODE 버전 732-750 소프트웨어 시리얼 번호 ACP # J267193 ics @ steamboy : ~/icsdev $ – octopusgrabbus