SQL Hunt,挑战查询

时间:2013-01-28 14:00:34

标签: sql oracle

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

问题陈述:

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

以下是源表的结构

NWT_Connection_Details

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

NWT_Cancellation_Reason

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

结果表是一个汇总表,其中包含已取消的汇总。目标表的结构如下。

Cancellations_Summary     Can_Reason     取消数量     Duration_of_Service     区

注意:Duration_of_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

1 个答案:

答案 0 :(得分:1)

这是执行您想要的基本查询:

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中进行此类查询。这是数据库的设计类型。 Oracle是最好的方法。

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