【发布时间】:2016-09-16 07:50:40
【问题描述】:
我需要从结果表中选择一组行。我已经写了 select 但有错误消息 ORA-00913。如何写一个正确的选择?我有一个 结果表:
DROP TABLE MONEY_ACTIVITY;
CREATE TABLE MONEY_ACTIVITY (
ID NUMBER(15) NOT NULL,
DOCUMENT_NUMBER VARCHAR2(13) NULL,
ID_CUSTOMER NUMBER NULL,
BASE_AMOUNT NUMBER(5,2) NULL
);
并插入:
INSERT INTO MONEY_ACTIVITY VALUES (1, 'input_saldo', 111222, 300);
INSERT INTO MONEY_ACTIVITY VALUES (2, 'input_saldo', 222333, 600);
INSERT INTO MONEY_ACTIVITY VALUES (3, 'ouput_saldo', 333444, 400);
INSERT INTO MONEY_ACTIVITY VALUES (4, 'ouput_saldo', 444555, 600);
INSERT INTO MONEY_ACTIVITY VALUES (5, 'TN0001', 444555, 600);
INSERT INTO MONEY_ACTIVITY VALUES (6, 'TN0002', 444555, 700);
INSERT INTO MONEY_ACTIVITY VALUES (7, 'TN0003', 333444, 600);
INSERT INTO MONEY_ACTIVITY VALUES (8, 'TN0004', 333444, 700);
INSERT INTO MONEY_ACTIVITY VALUES (9, 'TN0005', 111444, 600);
INSERT INTO MONEY_ACTIVITY VALUES (10, 'TN0006', 222444, 700);
我需要得到结果表:
input_saldo 900
ouput_saldo 1000
TN0001 600
TN0002 700
TN0003 600
TN0004 700
TN0005 600
TN0006 700
我正在尝试:
select
case when DOCUMENT_NUMBER = 'input_saldo' then (select DOCUMENT_NUMBER, SUM(BASE_AMOUNT)
from MONEY_ACTIVITY
where DOCUMENT_NUMBER = 'input_saldo'
group by DOCUMENT_NUMBER) end case,
case when DOCUMENT_NUMBER = 'ouput_saldo' then (select DOCUMENT_NUMBER, SUM(BASE_AMOUNT)
from MONEY_ACTIVITY
where DOCUMENT_NUMBER = 'ouput_saldo'
group by DOCUMENT_NUMBER) end case,
DOCUMENT_NUMBER,
BASE_AMOUNT
from MONEY_ACTIVITY
where DOCUMENT_NUMBER NOT IN ('input_saldo', 'output_saldo');
但是 ora-00913 的值太多
如何写出正确的“选择”?
抱歉,有一些新条件。该表可以包含具有相同 Document_number 和不同 ID_customer 的行。此行不得汇总。
例子:
1 input_saldo 111222 300 2 input_saldo 222333 600 4 输出萨尔多 444555 600 3 输出萨尔多 333444 400 11 TN0001 333444 600 --!!!!!!! 5 TN0001 444555 600 --!!!!!!! 6 TN0002 444555 700 ......
我尝试执行:
SELECT DOCUMENT_NUMBER, ID_CUSTOMER, SUM(BASE_AMOUNT)
FROM MONEY_ACTIVITY
GROUP BY DOCUMENT_NUMBER, ID_CUSTOMER;
返回结果是:
DOCUMENT_NUMBER ID_CUSTOMER SUM(BASE_AMOUNT)
input_saldo 222333 600
input_saldo 111222 300
ouput_saldo 333444 400
ouput_saldo 444555 600
TN0001 444555 600
TN0001 333444 600
TN0002 444555 700
TN0003 333444 600
TN0004 333444 700
TN0005 111444 600
TN0006 222444 700
但我需要:
input_saldo 111222 900
ouput_saldo 444555 1000
TN0001 444555 600
TN0001 333444 600
TN0002 444555 700
TN0003 333444 600
TN0004 333444 700
TN0005 111444 600
TN0006 222444 700
【问题讨论】:
-
跳过子查询,改为执行 JOIN。
-
1 input_saldo 111222 300 2 input_saldo 222333 600 4 ouput_saldo 444555 600 3 ouput_saldo 333444 400 11 TN0001 333444 600 --!!!!!!! 5 TN0001 444555 600 --!!!!!!! 6 TN0002 444555 700 ......