首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据列条件从2个值中选择具有多行的第1个值,否则选择第2个值所有行ORACLE

根据列条件从2个值中选择具有多行的第1个值,否则选择第2个值所有行ORACLE
EN

Stack Overflow用户
提问于 2017-03-31 03:41:39
回答 1查看 45关注 0票数 0

我有下面的oracle sql

代码语言:javascript
运行
复制
select     *      from     a
where     a.description      in 
('Rebook All (1)', 'Created stock identifier') 
and     a.date     between     '03/18/2017 00:00:01' 
AND     '03/25/2017 00:00:00'
and     a.unit     =     '38240007294677' 

现在,结果可以有两个描述,如下面针对单元号的描述,或者可以有1个描述,当它具有对单元号的两个描述时,我只需要选择“Rebook all (1)”(该描述可以多次出现,如下面在results中所示),表A中的描述不是“创建的股票标识符”及其相关细节,并且当它只有这2个中的1个描述时,如果“Rebook All (1)”不在那里,则选择“创建的股票标识符”,反之亦然。如何选择?提前谢谢。

代码语言:javascript
运行
复制
Date                       Description

3/20/2017 10:11:12.769000 AM创建的股票标识符

3/20/2017 10:10:47.775000 AM创建的股票标识符

3/20/2017 10:10:47.782000 AM创建的股票标识符

3/20/2017 8:14:41.696000 PM全部重订(1)

3/20/2017 8:14:41.885000 PM全部重订(1)

3/20/2017 8:13:51.622000 PM全部重订(1)

EN

回答 1

Stack Overflow用户

发布于 2017-03-31 03:46:03

一种方法是使用rank()

代码语言:javascript
运行
复制
select a.*
from (select a.*,
             rank() over (partition by unit order by description desc) as seqnum
      from a
      where a.description in  ('Rebook All (1)', 'Created stock identifier') 
            a.date >= date '2017-03-18' and
            a.date < date '2017-03-25' and
            a.unit = '38240007294677' 
    ) a
where seqnum = 1;

注:-这利用了"Rebook“在"Created”之后按字母顺序排列的事实。因此,order by中使用了desc。-我更喜欢ANSI标准日期格式。-注意对日期逻辑的更改,以消除对日期时间的需要。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43126974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档