[英]select 1st value with many rows out of 2 values based on column condition else 2nd value all rows ORACLE
[英]Select first value and its related rows out of two values based on column condition otherwise select second value and its related rows
我有如下所示的Oracle SQL
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个描述。 当它同时具有单位编号的描述时,我只需要选择“全部重新预订(1)”(此描述可以有很多次/很多行,如下图所示),而不是“已创建库存标识符”及其相关详细信息从表a
。 如果在这2个中只有1个描述,则如果不存在“全部重新预订(1)”,则选择“已创建库存标识符”,反之亦然。
如何选择呢?
Date Description
3/20/2017 10:11:12.769000 AM Created stock identifier
3/20/2017 10:10:47.775000 AM Created stock identifier
3/20/2017 10:10:47.782000 AM Created stock identifier
3/20/2017 8:14:41.696000 PM Rebook all (1)
3/20/2017 8:14:41.885000 PM Rebook all (1)
3/20/2017 8:13:51.622000 PM Rebook all (1)
当同时具有单位编号的描述(“重新预订全部(1)”,“已创建的库存标识符”)然后应该仅获得(“重新预订全部(1)”)及其所有行时(但有单元号中只有1个描述(“重新预订全部(1)”,“创建的库存标识符”),然后获得该描述-
同时具有单位编号的两个描述(“全部重新预订(1)”,“已创建的库存标识符”)时,仅获得(“全部重新预订(1)”),如下所示-
3/20/2017 8:14:41.696000 PM Rebook all (1)
3/20/2017 8:14:41.885000 PM Rebook all (1)
3/20/2017 8:13:51.622000 PM Rebook all (1)
如果单位编号只有1个描述“创建的库存标识符”,则仅获取该“创建的库存标识符”-
3/20/2017 10:11:12.769000 AM Created stock identifier
3/20/2017 10:10:47.775000 AM Created stock identifier
3/20/2017 10:10:47.782000 AM Created stock identifier
这是达到要求的一种方法。 我使用RANK() OVER
窗口函数根据DESC
顺序中的描述对单位记录进行排名。
SELECT *
FROM (
SELECT UNIT
, DESCRIPTION
, RANK() OVER (PARTITION BY UNIT ORDER BY DESCRIPTION DESC) RN
FROM MY_TABLE 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'
)
WHERE RN = 1
从Oracle 12c开始:
select a.*
from a
where a.unit = '38240007294677'
and a.description in ('Rebook All (1)', 'Created stock identifier')
and a.date >= date '2017-01-18'
and a.date < date '2017-03-25'
order by case when a.description = 'Rebook All (1)' then 1 else 2 end
fetch first row with ties;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.