对exists用法的祥述

来源:互联网 发布:怎样删除kingroot软件 编辑:程序博客网 时间:2024/06/09 13:38

表的说明:oe_order_header_all订单头信息表

字段说明:header_id订单头的编号,主键

                org_id公司编号,

                order_date下单时间,

                sold_to_org_id客户(customer)的编号,

             booked_flag是否已经确认要下该订单的标志列

cancelled_flag是否取消的标志列(*取消则该客户就不是我的客户了)

查询功能:查看2014 ISH Q1新客户数据,新客户的定义为:周期内(1/1~3/31)之前未成交,期间有成交的记录的新客户数据

分析及思路:1.org_id=287 

2.201411号之前没有成交 

3.周期内(2014112014331日)有成交

首先在oe_order_headers_all表中找到周期内有成交且公司编号为287的记录(记录一),然后再在oe_order_headers_all表中找到在周期之前成交且公司编号为287的记录(记录二),最后通过sold_to_org_id的比对(将记录已中的sold_to_org_id传入记录而中)从记录一中去掉记录二中存在的。

SELECT ooha1.sold_to_org_id,ooha1.ordered_date

  FROM oe_order_headers_all ooha1

 WHERE ooha1.ordered_dateBETWEEN to_date('2014-01-01','yyyy-mm-dd')AND to_date('2014-03-31','yyyy-mm-dd')+0.9999

  AND ooha1.org_id=287

  ANDNOTexists(SELECT *

                                 FROM oe_order_headers_all ooha2

                              WHERE ooha2.sold_to_org_id = ooha1.sold_to_org_id

                                   AND ooha2.ordered_date <to_date('2014-01-01','yyyy-mm-dd')

                                    AND ooha2.org_id =287

                                  AND ooha2.cancelled_flag ='N'

                                   AND ooha2.booked_flag ='Y'       

          );

图解分析:

假设oe_order_headers_all表的结构和数据如下:

Head_id

Org_id

Order_date

Sold_to_org_id

1

227

2014-1-3

1

2

227

2014-1-2

2

3

287

2014-2-1

3

4

287

2014-2-5

3

5

227

2014-3-7

3

6

287

2014-12-3

3

7

287

2014-3-2

4

8

287

2014-12-5

5

9

227

2014-2-13

5

 

首先找出order_date在周期内且org_id287的记录,如下图,粉红色底纹的是满足条件的:

Head_id

Org_id

Order_date

Sold_to_org_id

1

227

2014-1-3

1

2

227

2014-1-2

2

3

287

2014-2-1

3

4

287

2014-2-5

3

5

227

2014-3-7

3

6

287

2014-12-3

3

7

287

2014-3-2

4

8

287

2014-12-5

5

9

227

2014-2-13

5

 

 

 

然后找出order_date在周期之前且org_id287的记录,如下图,淡蓝色底纹的是满足条件的:

Head_id

Org_id

Order_date

Sold_to_org_id

1

227

2014-1-3

1

2

227

2014-1-2

2

3

287

2014-2-1

3

4

287

2014-2-5

3

5

227

2014-3-7

3

6

287

2014-12-3

3

7

287

2014-3-2

4

8

287

2014-12-5

5

9

227

2014-2-13

5

 最后比对两个记录中Sold_to_org_id栏位的值

 

 

Head_id

Org_id

Order_date

Sold_to_org_id

1

227

2014-1-3

1

2

227

2014-1-2

2

3

287

2014-2-1

3

4

287

2014-2-5

3

5

227

2014-3-7

3

6

287

2014-12-3

3

7

287

2014-3-2

4

8

287

2014-12-5

5

9

227

2014-2-13

5

 

Head_id

Org_id

Order_date

Sold_to_org_id

1

227

2014-1-3

1

2

227

2014-1-2

2

3

287

2014-2-1

3

4

287

2014-2-5

3

5

227

2014-3-7

3

6

287

2014-12-3

3

7

287

2014-3-2

4

8

287

2014-12-5

5

9

227

2014-2-13

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

可以看出第一条粉红记录中sold_to_org_id栏位中的值为3,在淡蓝记录中sold_to_org_id栏位中的值为3和5,可以比对出3不是新客户

Head_id

Org_id

Order_date

Sold_to_org_id

1

227

2014-1-3

1

2

227

2014-1-2

2

3

287

2014-2-1

3

4

287

2014-2-5

3

5

227

2014-3-7

3

6

287

2014-12-3

3

7

287

2014-3-2

4

8

287

2014-12-5

5

9

227

2014-2-13

5

 

Head_id

Org_id

Order_date

Sold_to_org_id

1

227

2014-1-3

1

2

227

2014-1-2

2

3

287

2014-2-1

3

4

287

2014-2-5

3

5

227

2014-3-7

3

6

287

2014-12-3

3

7

287

2014-3-2

4

8

287

2014-12-5

5

9

227

2014-2-13

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

可以看出第一条粉红记录中sold_to_org_id栏位中的值为4,在淡蓝记录中sold_to_org_id栏位中的值为35,可以比对出35中不包含4,因此sold_to_org_id4的客户是新客户

Head_id

Org_id

Order_date

Sold_to_org_id

1

227

2014-1-3

1

2

227

2014-1-2

2

3

287

2014-2-1

3

4

287

2014-2-5

3

5

227

2014-3-7

3

6

287

2014-12-3

3

7

287

2014-3-2

4

8

287

2014-12-5

5

9

227

2014-2-13

5

Head_id

Org_id

Order_date

Sold_to_org_id

1

227

2014-1-3

1

2

227

2014-1-2

2

3

287

2014-2-1

3

4

287

2014-2-5

3

5

227

2014-3-7

3

6

287

2014-12-3

3

7

287

2014-3-2

4

8

287

2014-12-5

5

9

227

2014-2-13

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

可以看出第一条粉红记录中sold_to_org_id栏位中的值为4,在淡蓝记录中sold_to_org_id栏位中的值为35,可以比对出35中不包含4,因此sold_to_org_id4的客户是新客户

 

 

 

 

0 0
原创粉丝点击