我需要从 Toad Oracle 中的表中过滤记录

问题描述 投票:0回答:1

我需要在 Toad Oracle 中根据下面概述的逻辑从表中过滤记录。

逻辑是:

  • 如果
    customer.ID
    customer.ORDERID
    组合中
    customer.CODE
    的值为“TT”和“TP”,则加载值“TP”并忽略“TT”。

注意:

ID
ORDERID
列可以有多行。

我无法将此逻辑放入

WHERE
子句中,也无法理解如何根据给定逻辑选择和排除记录。请在这方面帮助我。

我尝试了

GROUP BY
,但它不起作用,因为我正在获取表的所有列。

sql oracle
1个回答
0
投票

从 Oracle 12 开始,在

DENSE_RANK
语句中使用
CASE
ORDER BY
表达式来优先考虑
TT
行而不是
TP
,然后使用
FETCH FIRST ROW WITH TIES
获取每组中优先级最高的行:

SELECT *
FROM   customer
WHERE  code IN ('TT', 'TP')
ORDER BY
       DENSE_RANK() OVER (
         PARTITION BY id, orderid
         ORDER BY CASE code WHEN 'TT' THEN 1 ELSE 2 END
       )
FETCH FIRST ROW WITH TIES

在早期版本中,您可以在内联视图中进行过滤:

SELECT *
FROM   (
  SELECT c.*,
         DENSE_RANK() OVER (
           PARTITION BY id, orderid
           ORDER BY CASE code WHEN 'TT' THEN 1 ELSE 2 END
         ) AS rnk
  FROM   customer c
  WHERE  code IN ('TT', 'TP')
)
WHERE  rnk = 1
© www.soinside.com 2019 - 2024. All rights reserved.