Oracle 12c。我有一个营销应用程序。我有两个感兴趣的表。一个称为Campaign_Definitions,每个将要运行的营销活动都有一行。我有另一个名为TARGET的表,它每个家族有一行我们希望定位。对于CAMPAIGN_DEFINITION表中的每个CAMPAIGNS,TARGET表还将有一个COLUMN,显示该广告系列是否适用于该系列。我需要帮助的代码将在一个只显示一个家庭的屏幕上执行。
我遇到的挑战是我需要以奇怪的方式加入。我需要的END结果是给定一个家庭(下图中的Bob Smith)向我展示每个CAMPAIGN(作为一个单独的行),以及该广告系列是否适用于该系列。虽然我只显示了3个广告系列,但大约有90个广告系列。如果这有用,可以使用SQL或PL / SQL,因为数据会以JSON格式传输到应用程序。除了为90个剧本中的每个剧本编写几行代码之外,还有一种干净的方法吗?
答案 0 :(得分:0)
取消转移目标表,然后加入它:
with camp_def(camp_nm, prod, st_dt, end_dt)
as(
select 'Easy_Tennis', 'Tennis Lessons', 'Jan-01', 'Mar-30' from dual union all
select 'Summer_Vacations', 'Time Share', 'Apr-01', 'Sep-01' from dual union all
select 'CPR_For_Beginners','CPR Class', 'Sep-01','Dec-01' from dual
)
,
Tgt(Fam_nm, Easy_tennis,Summer_Vacations,CPR_For_Beginners)
as(
select 'Bob Smith','N','Y','Y' from dual union all
select 'Tim Jones','N','Y','N' from dual union all
select 'Fred Davis','Y','Y','N' from dual
)
select t.fam_nm, c.*, t.FLG Is_Applicable from camp_def c
join (
select * from tgt
unpivot
( FLG for CAMP_NM in (Easy_Tennis, Summer_Vacations, CPR_For_Beginners))
) t
on upper(c.camp_nm) = t.camp_nm