繁体   English   中英

Oracle SQL-基于列获取价值

[英]Oracle SQL - getting value based on a column

我有两个表:

TR_TRN (ID_WS, STORE, STATUS)
TR_RTL (ID_WS, STORE, ID_LY) 

TR_TRN中的状态为19或20。

有些记录的状态分别为19和20,而有些记录的状态只有19(表示它们正在等待交易)

这两个表结合在一起:

ID_WS and STORE

我需要TR_RTL表中状态仅为19的TR_RTL中的所有记录。

我怎么做 ?

您可以使用EXISTS()并在内部查询中使用HAVING子句来确定该记录是否只有status = 19CASE EXPRESSION

SELECT * FROM TR_RTL t
WHERE EXISTS(SELECT 1 FROM TR_TRN s
             WHERE s.id_ws = t.id_ws and s.store = t.store
             HAVING COUNT(CASE WHEN s.status = 19 THEN 1 END) = 1
                AND COUNT(CASE WHEN s.status = 20 THEN 1 END) = 0)

要获取状态为19且状态为20的所有ID(ID_WS,STORE),请使用以下查询

select ID_WS, STORE from TR_TRN where STATUS = 19
minus
select ID_WS, STORE from TR_TRN where STATUS = 20;

其余的是一个简单的IN子查询选择:

select * from TR_RTL 
where (ID_WS, STORE) IN
(
select ID_WS, STORE from TR_TRN where STATUS = 19
minus
select ID_WS, STORE from TR_TRN where STATUS = 20
);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM