所以我们有列order_number,product_name,product_number,product_type。product_type有两种类型,semi和finish,订单号以S开头,而finish类型的订单号以F开头。订单号类似于S123、F123。半成品订单号和成品订单号完全相同,除了起始件的SXXX表示Semi,FXXX表示成品类型。它们共享相同的产品名称和产品编号,但可以有1个semi、1个finish或只有1个semi,每个产品编号对应1个finish产品。如何查询才能找到只存在于半成品中而未完成的产品?
我想问一下
SELECT ORDER_NUMBER, PRODUCT_NAME, PRODUCT_NUMBER
FROM TABLE A
WHERE PRODUCT_TYPE = 'SEMI';
但这并不表明该产品是否只存在于semi而不是finish中。我该怎么做呢?我不能只使用PRODUCT_TYPE NOT IN ('FINISH'),因为它们的订单号是不同的,唯一匹配的是产品名称和产品编号。
帮助。:(
发布于 2020-11-21 00:02:31
以下是SUBSTR函数删除第一个字符( S,F)的一种方法,您可以比较产品编号以查看是否有任何抛光类型:
SELECT
ORDER_NUMBER
, PRODUCT_NAME
, PRODUCT_NUMBER
FROM
Table1 A
WHERE
PRODUCT_TYPE = 'SEMI'
AND NOT EXISTS
(
SELECT
1
FROM
Table1 F
WHERE
F.PRODUCT_TYPE = 'FINISH'
AND SUBSTR( A.PRODUCT_NUMBER, 2) = SUBSTR(F.PRODUCT_NUMBER, 2)
);
发布于 2020-11-21 00:10:05
以下是使用COUNT()
分析函数检查每个产品名称和编号中的SEMI和FINISH行的计数的一种方法:
with table_a as (select 'S1' order_number, 'A' product_name, 1 product_number, 'SEMI' product_type from dual union all
select 'F1' order_number, 'A' product_name, 1 product_number, 'FINISH' product_type from dual union all
select 'S2' order_number, 'B' product_name, 2 product_number, 'SEMI' product_type from dual union all
select 'F3' order_number, 'C' product_name, 3 product_number, 'FINISH' product_type from dual)
select order_number,
product_name,
product_number,
product_type
from (select order_number,
product_name,
product_number,
product_type,
case when count(case when product_type = 'SEMI' then 1 end) over (partition by product_name, product_number) > 0 then 'Y' else 'N' end semi_present,
case when count(case when product_type = 'FINISH' then 1 end) over (partition by product_name, product_number) > 0 then 'Y' else 'N' end finish_present
from table_a)
where semi_present = 'Y'
and finish_present = 'Y';
ORDER_NUMBER PRODUCT_NAME PRODUCT_NUMBER PRODUCT_TYPE
------------ ------------ -------------- ------------
S1 A 1 SEMI
F1 A 1 FINISH
不过,我有点担心您的表结构;这似乎非常不规范(您通常会有一个包含产品信息的表,其中包含某种引用每个产品的id,然后通过id列连接到该product表)。我希望这是对您已简化的几个表的查询的简化版本。
附注:以后请在你的问题中提供一些样本数据。你可以看到,我不得不自己编造一些数据,我不得不猜测。
https://stackoverflow.com/questions/64932662
复制相似问题