【发布时间】:2010-05-25 17:03:58
【问题描述】:
我有一张桌子叫 2 个桌子
create table ORDERS (
ORDER_NO NUMBER(38,0) not null,
ORDER_DATE DATE not null,
SHIP_DATE DATE null,
SHIPPING_METHOD VARCHAR2(12) null,
TAX_STATUS CHAR(1) null,
SUBTOTAL NUMBER null,
TAX_AMT NUMBER null,
SHIPPING_CHARGE NUMBER null,
TOTAL_AMT NUMBER null,
CUSTOMER_NO NUMBER(38,0) null,
EMPLOYEE_NO NUMBER(38,0) null,
BRANCH_NO NUMBER(38,0) null,
constraint ORDERS_ORDERNO_PK primary key (ORDER_NO) );
和
create table PAYMENTS (
PAYMENT_NO NUMBER(38,0) NOT NULL,
CUSTOMER_NO NUMBER(38,0) null,
ORDER_NO NUMBER(38,0) null,
AMT_PAID NUMBER NULL,
PAY_METHOD VARCHAR(10) NULL,
DATE_PAID DATE NULL,
LATE_DAYS NUMBER NULL,
LATE_FEES NUMBER NULL,
constraint PAYMENTS_PAYMENTNO_PK primary key (PAYMENT_NO) );
我试图找出每个客户有多少延迟订单。 PAYMENTS 表中的 late_days 列包含客户为任何特定订单付款迟到的天数。
所以我正在做这个查询
SELECT C.CUSTOMER_NO, C.lname, C.fname, sysdate, COUNT(P.ORDER_NO) as number_LATE_ORDERS
FROM CUSTOMER C, orders o, PAYMENTS P
WHERE C.CUSTOMER_NO = o.CUSTOMER_NO
AND P.order_no = o.order_no
AND P.LATE_DAYS>0
group by C.CUSTOMER_NO, C.lname, C.fname
这意味着,我正在计算那些有任何延迟付款且late_days>0 的订单。但这只是给了我有任何订单的客户 late_days>0,但没有任何延迟订单的客户没有出现。因此,如果一个客户有 5 个延迟付款的订单,那么它会为该客户显示 5 个,但如果一个客户有 0 个延迟订单,则在此查询中未选择该客户。 有什么方法可以选择所有客户,如果他有任何迟到的订单,它会显示数字,如果他没有任何迟到的订单,它会显示0。
【问题讨论】: