SQL查询,挑战性查询

SQL查询,挑战性查询,sql,oracle,Sql,Oracle,这是我在Informatica应该做的任务。我只想听取可能的解决办法的介绍。我并不特别需要查询,只是SQL/Oracle中的步骤可能会有很大帮助 问题陈述: NW Telecommunications是印度蜂窝通信的服务提供商。他们在印度所有的州都有业务。作为其业务运营的一部分,他们收集服务取消原因的详细信息,以改进其客户保留策略。他们现在有兴趣了解客户停止服务的主要原因 以下是源表的结构 NWT_连接_详情 Phone_No SIM (primary key) Connection_Star

这是我在Informatica应该做的任务。我只想听取可能的解决办法的介绍。我并不特别需要查询,只是SQL/Oracle中的步骤可能会有很大帮助

问题陈述:

NW Telecommunications是印度蜂窝通信的服务提供商。他们在印度所有的州都有业务。作为其业务运营的一部分,他们收集服务取消原因的详细信息,以改进其客户保留策略。他们现在有兴趣了解客户停止服务的主要原因

以下是源表的结构

NWT_连接_详情

Phone_No 
SIM (primary key)
Connection_Start_Date
Rate_Plan_Id
Connection_Status
Connection_Closure_Date
Can_Reason_Id
Cust_Id (foreign key)
Home_Location
取消原因

Can_Reason_Id (primary key)
Can_Text
取消原因表中的数据:

 Can_Reason_Id       Can_Text
 NW              Network Issues
 MNP             Porting to a competitor
 RP              Rate Plan Issue
 RL              Relocation
 CS              Unsatisfactory customer service
结果表是一个汇总表,其中包含所发生取消的汇总。目标表的结构如下所示

取消摘要 你能说出理由吗 取消预订人数 服务期限 地带

注:服务期限为<1个月、1-3个月、3-6个月、6-12个月和>12个月

样本目标表数据:

NW      18         1 to 3      South
NW      5          1 to 3      South
CS      25         3 to 6      North

这是实现您所需功能的基本查询:

select cr.can_text, count(*)
from nwt_connection_details cd join
     nwt_cancellation_reason cr
     on cd.can_reason_id = cr.can_reason_id
group by cr.can_text
order by count(*) desc     
不过,我之所以回答这个问题,是因为这提供了一个对某些事情发表评论的机会。首先,您甚至没有理由考虑在Informatica中执行这样的查询。这是为数据库设计的查询类型。甲骨文是最好的方法


其次,这可能不是你想要的一切。您需要考虑日期、客户类型和任期。通常,有一个OLAP系统来解决这些类型的请求(如果数据不太大,可能是Excel中的透视表)。这样的OLAP系统可以使用Informatica或使用Oracle的查询进行加载。

这似乎是一个简单的计数(*)和分组练习。兰迪:问题是我假设用三个变量来分组。区域、日期和取消原因。但在Informatica中实现它意味着你可以打印出漂亮的方框和线条,并把它们贴在墙上。好的,运行时间会延长1000000倍,但是。。。嗯…@Gordon Linoff:我很抱歉,因为我的名声不好,所以我不能投票支持这件事。非常感谢