[英]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 = 19
的CASE 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.