0

使用 Teradata,我的数据在一列中有 6 个选项,我希望将六个选项中的每一个都放在一个单独的列中,并计算它有多少条目,目前我有 6 个单独的select语句和一个在底部选择将它们连接在一起,无论如何可以在一个语句中得到它

输出如下所示:

AgentName|emp_number|Manager_Empl_No| Hardware/Fault| Customer Experience| Prefer another Provider| Coverage/Serviceability| Costs Service| No Longer Required |Customer Usage
name 1| xxxx| xxxx |15| 27| 10| 3| 7| 22| 6
Name 2| xxxx| xxxx |19 |6 |29 |22 |10 |42 |4

我的代码是....

--- Hardware fault --- 
create volatile table hardware as
(
select
CSR_FirstName||' '||CSR_LastName as AgentName
,emp_number
,Manager_empl_no
,count(service) as "Hardware/Fault"
from ipshare.ORR_retention_database a
full join RMOIDS
on emp_number = Employee_No
where date_created between (sel start_date from startend_date) and (sel end_date from startend_date)
and referred_product = 'Mobile'
and decline_reason1 = 'Hardware/Fault'
group by (AgentName,emp_number,Manager_empl_no,decline_reason1)
qualify RANK() over (partition by AgentName order by AgentName DESC)=1
) 
with data on commit preserve rows;
sel * from hardware


--- Customer Experience --- 
create volatile table custex as
(
select
CSR_FirstName||' '||CSR_LastName as AgentName
,emp_number
,Manager_empl_no
,count(service) as "Customer Experience"
from ipshare.ORR_retention_database a
full join RMOIDS
on emp_number = Employee_No
where date_created between (sel start_date from startend_date) and (sel end_date from startend_date)
and referred_product = 'Mobile'
and decline_reason1 = 'Customer Experience'
group by (AgentName,emp_number,Manager_empl_no,decline_reason1)
qualify RANK() over (partition by AgentName order by AgentName DESC)=1
) 
with data on commit preserve rows;

---Prefer another Provider
create volatile table pap as
(
select
CSR_FirstName||' '||CSR_LastName as AgentName
,emp_number
,Manager_empl_no
,count(service) as "Prefer another Provider"
from ipshare.ORR_retention_database a
full join RMOIDS
on emp_number = Employee_No
where date_created between (sel start_date from startend_date) and (sel end_date from startend_date)
and referred_product = 'Mobile'
and decline_reason1 = 'Prefer another Provider'
group by (AgentName,emp_number,Manager_empl_no,decline_reason1)
qualify RANK() over (partition by AgentName order by AgentName DESC)=1
) 
with data on commit preserve rows;

----Coverage/Serviceability
create volatile table coverage as
(
select
CSR_FirstName||' '||CSR_LastName as AgentName
,emp_number
,Manager_empl_no
,count(service) as "Coverage/Serviceability"
from ipshare.ORR_retention_database a
full join RMOIDS
on emp_number = Employee_No
where date_created between (sel start_date from startend_date) and (sel end_date from startend_date)
and referred_product = 'Mobile'
and decline_reason1 = 'Coverage/Serviceability'
group by (AgentName,emp_number,Manager_empl_no,decline_reason1)
qualify RANK() over (partition by AgentName order by AgentName DESC)=1
) 
with data on commit preserve rows;

---Cost

create volatile table cost as
(
select
CSR_FirstName||' '||CSR_LastName as AgentName
,emp_number
,Manager_empl_no
,count(service) as "Costs"
from ipshare.ORR_retention_database a
full join RMOIDS
on emp_number = Employee_No
where date_created between (sel start_date from startend_date) and (sel end_date from startend_date)
and referred_product = 'Mobile'
and decline_reason1 = 'Costs'
group by (AgentName,emp_number,Manager_empl_no,decline_reason1)
qualify RANK() over (partition by AgentName order by AgentName DESC)=1
) 
with data on commit preserve rows;

--Service no longer required
create volatile table snlr as
(
select
CSR_FirstName||' '||CSR_LastName as AgentName
,emp_number
,Manager_empl_no
,count(service) as "Service No Longer Required"
from ipshare.ORR_retention_database a
full join RMOIDS
on emp_number = Employee_No
where date_created between (sel start_date from startend_date) and (sel end_date from startend_date)
and referred_product = 'Mobile'
and decline_reason1 = 'Service No Longer Required'
group by (AgentName,emp_number,Manager_empl_no,decline_reason1)
qualify RANK() over (partition by AgentName order by AgentName DESC)=1
) 
with data on commit preserve rows;

--Customer Usage
create volatile table usage as
(
select
CSR_FirstName||' '||CSR_LastName as AgentName
,emp_number
,Manager_empl_no
,count(service) as "Customer Usage"
from ipshare.ORR_retention_database a
full join RMOIDS
on emp_number = Employee_No
where date_created between (sel start_date from startend_date) and (sel end_date from startend_date)
and referred_product = 'Mobile'
and decline_reason1 = 'Customer Usage'
group by (AgentName,emp_number,Manager_empl_no,decline_reason1)
qualify RANK() over (partition by AgentName order by AgentName DESC)=1
)
with data on commit preserve rows;

sel a.* 
,b."Customer Experience"
,c."Prefer another Provider"
,d."Coverage/Serviceability"
,e."Costs"
,f."Service No Longer Required"
,g."Customer Usage"
from hardware a
inner join custex b
on a.emp_number = b.emp_number
inner join pap c
on a.emp_number = c.emp_number
inner join coverage d
on a.emp_number = d.emp_number
inner join cost e
on a.emp_number = e.emp_number
inner join snlr f
on a.emp_number = f.emp_number
inner join usage g
on a.emp_number = g.emp_number
4

1 回答 1

0

我还没有验证你想要完成的 SQL 的其余部分,但我相信你可以通过在聚合函数中使用 CASE 语句来消除多个易失性表并针对源表进行传递。

SELECT CSR_FirstName||' '||CSR_LastName as AgentName
     , emp_number
     , Manager_empl_no
     , COUNT(CASE WHEN Decline_Reason1 = 'Customer Experience' 
                  THEN Service 
                  ELSE NULL 
             END) AS CustomerExperinceCount_
     , COUNT(CASE WHEN Decline_Reason1 = /* {Next Reason} */
                  THEN Service
                  ELSE NULL
             END) AS NextReasonCount_
  FROM ipshare.ORR_retention_database a
  FULL JOIN
       RMOIDS
    ON emp_number = Employee_No
 WHERE date_created between (sel start_date from startend_date) 
                        and (sel end_date from startend_date)
   AND referred_product = 'Mobile'
 GROUP BY (AgentName,emp_number,Manager_empl_no,decline_reason1)
QUALIFY RANK() over (partition by AgentName order by AgentName DESC)=1
于 2012-10-24T13:02:24.140 回答