Oracle 破译

Oracle 破译,oracle,oracle11g,oracle10g,Oracle,Oracle11g,Oracle10g,我写了一个查询来显示客户id、登录id和客户的信用债务总额。如果要借记客户到期金额,则必须创建一个虚拟列,并显示为“到期自客户”或“到期自客户”。请帮我解决这个问题 我正在附加表结构和值以及我的查询 -客户表 CREATE TABLE isbs_customer_mst ( cust_id VARCHAR2(30) NOT NULL, login_id VARCHAR2(30) NOT NULL, cust_nm VARCHAR2(30),

我写了一个查询来显示客户id、登录id和客户的信用债务总额。如果要借记客户到期金额,则必须创建一个虚拟列,并显示为“到期自客户”或“到期自客户”。请帮我解决这个问题

我正在附加表结构和值以及我的查询

-客户表

CREATE TABLE isbs_customer_mst
  (
     cust_id   VARCHAR2(30) NOT NULL,
     login_id  VARCHAR2(30) NOT NULL,
     cust_nm   VARCHAR2(30),
     cust_addr VARCHAR2(300),
     CONSTRAINT isbs_customer_mst_pk PRIMARY KEY (cust_id)
  );  
-价值观

INSERT INTO ISBS_CUSTOMER_MST (CUST_ID, LOGIN_ID, CUST_NM, CUST_ADDR) 
VALUES ('CUST0000000001', 'USER1', 'User Login ID 1', '143/1 Uthamar Gandhi Salai, Nungambakkam, Chennai - 34');

INSERT INTO ISBS_CUSTOMER_MST (CUST_ID, LOGIN_ID, CUST_NM, CUST_ADDR)
VALUES ('CUST0000000002', 'USER2', 'User Login ID 2', '143/2 Uthamar Gandhi Salai, Nungambakkam, Chennai - 34');

INSERT INTO ISBS_CUSTOMER_MST (CUST_ID, LOGIN_ID, CUST_NM, CUST_ADDR) 
VALUES ('CUST0000000003', 'USER3', 'User Login ID 3', '143/3 Uthamar Gandhi Salai, Nungambakkam, Chennai - 34');

INSERT INTO ISBS_CUSTOMER_MST (CUST_ID, LOGIN_ID, CUST_NM, CUST_ADDR) 
VALUES ('CUST0000000004', 'USER4', 'User Login ID 4', '143/4 Uthamar Gandhi Salai, Nungambakkam, Chennai - 34');
-借贷表

CREATE TABLE isbs_acct_ledger_det
  (
     acct_ledger_id    VARCHAR2(30),
     cust_id           VARCHAR2(30),
     credit_debit_amt  VARCHAR2(30) NOT NULL,
     credit_debit_dttm TIMESTAMP NOT NULL,
     CONSTRAINT isbs_acct_ledger_det_pk PRIMARY KEY (acct_ledger_id),
     CONSTRAINT isbs_acct_ledger_det_fk FOREIGN KEY (cust_id) REFERENCES
     isbs_customer_mst (cust_id)
  );  
-价值观

INSERT INTO ISBS_ACCT_LEDGER_DET (ACCT_LEDGER_ID, CUST_ID, CREDIT_DEBIT_AMT, CREDIT_DEBIT_DTTM) 
VALUES ('ACC0000000001', 'CUST0000000001', -1000.25, TO_DATE('01-10-2008 11:00:00', 'DD-MM-YYYY HH24:MI:SS'));

INSERT INTO ISBS_ACCT_LEDGER_DET (ACCT_LEDGER_ID, CUST_ID, CREDIT_DEBIT_AMT, CREDIT_DEBIT_DTTM) 
VALUES ('ACC0000000002', 'CUST0000000002', -256.75, TO_DATE('01-10-2008 11:00:00', 'DD-MM-YYYY HH24:MI:SS'));

INSERT INTO ISBS_ACCT_LEDGER_DET (ACCT_LEDGER_ID, CUST_ID, CREDIT_DEBIT_AMT, CREDIT_DEBIT_DTTM) 
VALUES ('ACC0000000003', 'CUST0000000002', 100.25, TO_DATE('05-10-2008 11:00:00', 'DD-MM-YYYY HH24:MI:SS'));
-质疑

SELECT c.CUST_NM
       , c.LOGIN_ID
       , SUM(a.CREDIT_DEBIT_AMT) "Outstanding Amt"
       , CASE WHEN a.CREDIT_DEBIT_AMT <= -9999.99 
             THEN 'Due to Cust' 
          ELSE 'Due from Cust' END "Due"
FROM ISBS_CUSTOMER_MST c
JOIN ISBS_ACCT_LEDGER_DET a
     ON c.CUST_ID = a.CUST_ID
GROUP BY c.CUST_NM, c.LOGIN_ID, a.CREDIT_DEBIT_AMT;

提前感谢

您可能需要从group by和SUM上的用例表达式中删除a.CREDIT\u DEBIT\u AMT


您需要在GROUPBY子句中添加case语句:

SELECT c.CUST_NM , c.LOGIN_ID , SUM(a.CREDIT_DEBIT_AMT) "Outstanding Amt" , CASE WHEN a.CREDIT_DEBIT_AMT <= -9999.99 THEN 'Due to Cust' ELSE 'Due from Cust' END "Due" FROM ISBS_CUSTOMER_MST c JOIN ISBS_ACCT_LEDGER_DET a ON c.CUST_ID = a.CUST_ID GROUP BY c.CUST_NM, c.LOGIN_ID, CASE WHEN a.CREDIT_DEBIT_AMT <= -9999.99 THEN 'Due to Cust' ELSE 'Due from Cust' END "Due";

由于聚合函数的规则是在GROUPBY子句中包含所有其他选定的属性,因此在处理sum时为什么要使用sin函数。Sin给出参数的Sin值 而abs同样返回正数

Select abs(-5) from dual ;
将返回5作为输出


我认为您的需求不需要这两个函数。

我们可以使用Abs和Sin函数吗?在处理求和时,为什么要使用Sin函数。Sin给出参数的Sin值,而abs返回正数,同样从dual中选择abs-5;将返回5作为输出。我认为您的需求不需要这两个功能。您能发布预期的输出吗?抱歉,作为答案添加。无法在应用程序中获取删除选项。将在我从笔记本电脑登录时删除
Select abs(-5) from dual ;