暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 想要使用single select语句而不是各种union all来获取上一季度的数据

askTom 2018-08-31
187

问题描述

我有5个使用union all的select语句 (在这里显示几个)
想要使用单个语句从表中获取收入。
所以基于和period_id>= 1009的条件
和Opp_Created_Date_Period_Id<= 1009 (以前的每个季度
其中1009表示yr 2018 Q2 (dim quater表中包含的数据看起来只有这样)
1008 - yr18 Q1
1007年第17季度 (季度)
等等。
-想拿以前的硬币。收入
-最重要的是,将period_id和Opp_Created_Date_Period_Id分别与每个季度进行比较,以产生该季度的收入。
-此期间id值继续下降,直到前五个季度
-这些只是参数

SELECT T1.PERIOD,NVL(Sum(Source_Rev),0) "SOURCE_REV"  FROM MA_DIM_QUATER_DATA_TEST  T1 LEFT JOIN
(
Select Sum(REVENUE_SHARE) As "SOURCE_REV" ,MIN(period_id) as PERIOD From Ma_Fact_Revenue_test  
Where  is_sourced!='Sourced'
AND (GEO_ID=0 OR 0=0)
AND ( Strategic_Initiative_Id IN (0) OR ( COALESCE(NULL, 0))=0)
AND period_id>=1009  
AND Opp_Created_Date_Period_Id<=1009

UNION ALL
Select Sum(REVENUE_SHARE) As "SOURCE_REV",MIN(period_id) as PERIOD From Ma_Fact_Revenue_test   
Where  is_sourced!='Sourced'
AND (GEO_ID=0 OR 0=0)
AND ( Strategic_Initiative_Id IN (0) OR ( COALESCE(NULL, 0))=0)
AND period_id>=1009-1   
AND Opp_Created_Date_Period_Id<=1009-1

UNION ALL
Select Sum(REVENUE_SHARE) As "SOURCE_REV",MIN(period_id) AS  PERIOD  From Ma_Fact_Revenue_test   
Where  is_sourced!='Sourced'
AND (GEO_ID=0 OR 0=0)
AND ( Strategic_Initiative_Id IN (0) OR ( COALESCE(NULL, 0))=0)
AND period_id>=1009-2  
AND Opp_Created_Date_Period_Id<=1009-2

UNION ALL

Select Sum(REVENUE_SHARE) As "SOURCE_REV",MIN(period_id) as PERIOD  From Ma_Fact_Revenue_test   
Where  is_sourced!='Sourced'
AND (GEO_ID=0 OR 0=0)
AND ( Strategic_Initiative_Id IN (0) OR ( COALESCE(NULL, 0))=0)
AND period_id>=1009-3  
AND Opp_Created_Date_Period_Id<=1009-3

UNION ALL
Select NVL(Sum(REVENUE_SHARE),0) As "SOURCE_REV" ,MIN(period_id) as "PERIOD" From Ma_Fact_Revenue_test   
Where  is_sourced!='Sourced'
AND (GEO_ID=0 OR 0=0)
AND ( Strategic_Initiative_Id IN (0) OR ( COALESCE(NULL, 0))=0)
AND period_id>=1009-4  
AND Opp_Created_Date_Period_Id<=1009-4
)T2 ON t1.id =t2.period
where t1.id in (1009,1009-1,1009-2,1009-3,1009-4)
GROUP BY t1.period
order by t1.period
复制

专家解答

仅关注T2,以下谓词始终为真:

AND (GEO_ID=0 OR 0=0)
AND ( Strategic_Initiative_Id IN (0) OR ( COALESCE(NULL, 0))=0)
复制


以下是所有查询的共同点

Where  is_sourced!='Sourced'
复制


所以这不能简化为:

(
Select Sum(REVENUE_SHARE) As "SOURCE_REV" ,MIN(period_id) as PERIOD From Ma_Fact_Revenue_test  
Where  is_sourced!='Sourced'
AND 
(
  ( period_id>=1009  AND Opp_Created_Date_Period_Id<=1009 )
or
  ( period_id>=1009-1 AND Opp_Created_Date_Period_Id<=1009-1 )
or
 ( period_id>=1009-2   AND Opp_Created_Date_Period_Id<=1009-2 )
or 
 ( period_id>=1009-3   AND Opp_Created_Date_Period_Id<=1009-3 )
or 
 ( period_id>=1009-4   AND Opp_Created_Date_Period_Id<=1009-4 )
) 
复制


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论