问题在底部,但简而言之,即使链接与我的案例表达相匹配,我正在创建的表格为字段分区提供我的Null值,我似乎无法找到原因。
我正在创建一个表,根据程序中的链接URL分配分部:
create table set_divisions as
select distinct campaign, offer,
case
when upper(link) like '%NORTH%' then 'NORTH'
when upper(link) like '%SOUTH%' then 'SOUTH'
when upper(link) like '%EAST%' then 'EAST'
when upper(link) like '%WEST%' then 'WEST'
ELSE NULL
END AS DIVISION
FROM TABLE A;
然后我在Division中获得了很多NULL,所以我试图看看我错过了什么链接,因为它们都应该在Division中有一个值。每个广告系列都有多个与北,南,东或西无关的链接,但每个广告系列也应包含案例陈述中的其中一个链接。
然后我运行以下内容:
select distinct link
from A, set_divisions S
where A.campaigncode = S.campaigncode
and A.offercode = S.offercode
and (
upper(link) like '%NORTH%'
or upper(link) like '%SOUTH%'
or upper(link) like '%EAST%'
or upper(link) like '%WEST%');
结果会返回包含NORTH
,SOUTH
,EAST
和WEST
的链接。
所以我的问题是在创建我的表时我在case表达式中做错了什么,导致它错过了这些链接?
错过链接的例子是(我只使用南方和东方,但所有四个链接都有类似的链接):
http://product.south.com/information/preference
http://sports.east.com/unsubscribe/?email=%%Linkurl9%%
谢谢,这是我的第一篇文章,所以如果我错过了某些内容或者我的代码看起来很糟糕,我会提前道歉。
Reighlo
答案 0 :(得分:0)
在第二个查询中,您的WHERE
子句指定链接必须包含NORTH,SOUTH,EAST或WEST。您的第一个查询不包含类似的WHERE
子句。
您可以运行它来查找不包含NORTH,SOUTH,EAST或WEST的链接以进行故障排除:
select distinct link
from A, set_divisions S
where A.campaigncode = S.campaigncode
and A.offercode = S.offercode
and upper(link) not like '%NORTH%'
and upper(link) not like '%SOUTH%'
and upper(link) not like '%EAST%'
and upper(link) not like '%WEST%');
答案 1 :(得分:0)
因此,我运行此表的表有数千万行,正如上面的注释中所提到的,case语句带回了Null,因为即使我的链接url在那里也产生了很多行。我不想排除导致NULL的所有结果,因为有些程序确实应该为null。我发现通过引入所有行的url并对它们进行分组,然后在包含我的case语句的情况下从该子集中选择不同的值,然后再次选择并运行case语句,其中所有剩余的除法仍然为null。然而,这确实带来了重复,所以我不得不使用rownumber()来引入我想要的一切。基本上是为了摆脱已存在真正除法的任何NULL。有一些重复,有不同的部门,但我需要带来这些,因为这是另一个必须要考虑的问题。这是我的代码,如果有更简单的方法,请随时告诉我。不确定它是否重要,但我的桌子在大约5分钟内运行。对不起,如果有任何拼写错误,我必须从我的代码重新创建这里的字段和值,因为我们的客户在隐私问题上真的很重要,虽然这不会放任何东西,但这只是一件令人头疼的事我宁愿不处理
create table set_divisions as
SELECT DISTINCT CAMPAIGNCODE, OFFERCODE, DIV
FROM
(
SELECT DISTINCT CAMPAIGN, OFFER, DIVISION
ROWNUMBER() OVER
(PARTITION BY CAMPAIGNCODE, OFFERCODE, ORDER BY DIVISION) AS RN
FROM (SELECT DISTINCT CAMPAIGN, OFFER, DIVISION)
case
when upper(URL) like '%NORTH%'
AND DIVISION IS NULL THEN 'NORTH'
when upper(URL) like '%SOUTH%'
AND DIVISION IS NULL then 'SOUTH'
when upper(URL) like '%EAST%'
AND DIVISION IS NULL then 'EAST'
when upper(URL) like '%WEST%'
AND DIVISION IS NULL then 'WEST'
ELSE DIVISION
END AS DIV
FROM
(
SELECT DISTINCT CAMPAIGN, OFFER, DIVISION,
CASE WHEN DIVISION IS NULL THEN LINK_URL
ELSE NULL
END AS URL
FROM
(
select campaign, offer, linkurl
case
when upper(link) like '%NORTH%' then 'NORTH'
when upper(link) like '%SOUTH%' then 'SOUTH'
when upper(link) like '%EAST%' then 'EAST'
when upper(link) like '%WEST%' then 'WEST'
ELSE NULL
END AS DIVISION
FROM TABLE A
group by campaign, offer, linkurl
case
when upper(link) like '%NORTH%' then 'NORTH'
when upper(link) like '%SOUTH%' then 'SOUTH'
when upper(link) like '%EAST%' then 'EAST'
when upper(link) like '%WEST%' then 'WEST'
)
)
)
WHERE RN = 1
OR (RN >1
AND DIV IS NOT NULL);