Oracle 如何从specefic客户不存在的表中提取记录?
我在一张表格中有以下情况(客户联系人) 我想创建一个结果集,在那里我可以显示CUST2与那些仅基于SYSDATE的CUST1中存在的行的映射。我不会选择与CUST1和CUST2共用的行 当前表格Oracle 如何从specefic客户不存在的表中提取记录?,oracle,Oracle,我在一张表格中有以下情况(客户联系人) 我想创建一个结果集,在那里我可以显示CUST2与那些仅基于SYSDATE的CUST1中存在的行的映射。我不会选择与CUST1和CUST2共用的行 当前表格 CUSTOMER ID OFFERNAME PACKAGE INSERT_DATE ------------------------------------------------- CUST1 OfferA 123 27-Mar-2020 CU
CUSTOMER ID OFFERNAME PACKAGE INSERT_DATE
-------------------------------------------------
CUST1 OfferA 123 27-Mar-2020
CUST1 OfferB 456 27-Mar-2020
CUST1 OfferC 100 27-Mar-2020
CUST2 OfferA 123 27-Mar-2020
所需结果集:
CUSTOMER ID OFFERNAME PACKAGE INSERT_DATE
-------------------------------------------------
CUST1 OfferA 123 27-Mar-2020
CUST1 OfferB 456 27-Mar-2020
CUST1 OfferC 100 27-Mar-2020
CUST2 OfferB 456 27-Mar-2020
CUST2 OfferC 100 27-Mar-2020
我编写了以下查询,但它不工作(没有记录)。这个问题正确吗
select * from CUST_CONTACTS A
LEFT JOIN CUST_CONTACTS B ON B.OFFERNAME = A.OFFERNAME and B.PACKAGE = A.PACKAGE
WHERE A.OFFERNAME is null and TRUNC(A.DT_INSERT) = TRUNC(SYSDATE) and TRUNC(B.DT_INSERT) = TRUNC(SYSDATE) AND A.CUSTOMER_ID = 'CUST1' AND B.CUSTOMER_ID = 'CUST2'
这里有一个选择
SQL> with test (id, offer, pkg, datum) as
2 -- sample data
3 (select 'c1', 'ofa', 123, date '2020-03-27' from dual union all
4 select 'c1', 'ofb', 456, date '2020-03-27' from dual union all
5 select 'c1', 'ofc', 100, date '2020-03-27' from dual union all
6 select 'c2', 'ofa', 123, date '2020-03-27' from dual
7 ),
8 diff as
9 -- C1 that doesn't have its match in C2
10 (select 'c2' id, offer, pkg, datum
11 from test where id = 'c1' and datum = trunc(sysdate)
12 minus
13 select 'c2' id, offer, pkg, datum
14 from test where id = 'c2' and datum = trunc(sysdate)
15 )
16 -- Final result
17 select id, offer, pkg, datum
18 from test
19 where id = 'c1'
20 and datum = trunc(sysdate)
21 union all
22 select id, offer, pkg, datum
23 from diff
24 order by id, offer;
ID OFF PKG DATUM
-- --- ---------- ----------
c1 ofa 123 27.03.2020
c1 ofb 456 27.03.2020
c1 ofc 100 27.03.2020
c2 ofb 456 27.03.2020
c2 ofc 100 27.03.2020
SQL>
您可以简单地使用减号和并集运算符,如下所示:
SQL> WITH YOUR_TABLE ( ID, OFFER, PKG, DATUM ) AS -- sample data
2 (select 'CUST1', 'OfferA', 123, date '2020-03-27' from dual union all
3 select 'CUST1', 'OfferB', 456, date '2020-03-27' from dual union all
4 select 'CUST1', 'OfferC', 100, date '2020-03-27' from dual union all
5 select 'CUST2', 'OfferA', 123, date '2020-03-27' from dual
6 ) --your query starts from here
7 SELECT ID, OFFER, PKG, DATUM FROM YOUR_TABLE WHERE ID = 'CUST1'
8 UNION
9 SELECT 'CUST2' AS ID, OFFER, PKG, DATUM FROM YOUR_TABLE WHERE ID = 'CUST1'
10 MINUS
11 SELECT ID, OFFER, PKG, DATUM FROM YOUR_TABLE WHERE ID = 'CUST2';
ID OFFER PKG DATUM
----- ------ ---------- ---------
CUST1 OfferA 123 27-MAR-20
CUST1 OfferB 456 27-MAR-20
CUST1 OfferC 100 27-MAR-20
CUST2 OfferB 456 27-MAR-20
CUST2 OfferC 100 27-MAR-20
SQL>
能否添加
创建表
语句和一些插入项
?