【问题标题】:Oracle SQL - getting value based on a columnOracle SQL - 基于列获取值
【发布时间】:2016-06-19 16:12:23
【问题描述】:

我有两张桌子:

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 中所有在 TR_TRN 表中状态为 19 的记录。

我该怎么做?

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案1】:

    您可以在内部查询中使用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)
    

    【讨论】:

      【解决方案2】:

      要获取所有状态为 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
      );
      

      【讨论】:

        猜你喜欢
        • 2021-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多