2017-11-10 16 views
1

안녕하세요 제 기능이 아닌 코드에 대한 질문이 있습니다. 보시다시피, 나는 일부 테이블을 유니온과 연결하려고합니다. 마케팅 애플리케이션의 레코드를 원하지만 일부 산술 연산자를 사용해야합니다. 문제는 비록 데이터 유형을 Number로 설정하더라도 코드가 작동하지 않지만 다른 변환에서는 문제가 없음을 알 수 있으며 "숫자 값"은 인식 할 수 없다 "라는 오류를보고합니다. 전체 코드를 보내지 만 문제가 있습니다.눈송이 변환의 데이터 유형 (산술 연산자)

(case when skl."impressions_sklik" = 0 then 0 
    when skl."clicks_sklik" = 0 then 0 
    when skl."clicks_sklik" = '' then 0 
    when skl."impressions_sklik" = '' then 0 
    ELSE (iff(skl."clicks_sklik" = 0 or skl."clicks_sklik" IS NULL or 
    skl."clicks_sklik" = '', 0, skl."clicks_sklik")/
    iff(skl."impressions_sklik" = 0 or skl."impressions_sklik" IS NULL 
    or 
    skl."impressions_sklik" = '', 0, skl."impressions_sklik")) 
    END) as "CTR" 
    FROM "sklik" skl 

나이 :이 라인

(case when skl."impressions_sklik" = 0 then 0 
    when skl."clicks_sklik" = 0 then 0 
    when skl."clicks_sklik" = '' then 0 
    when skl."impressions_sklik" = '' then 0 
    when skl."clicks_sklik" IS NULL then 0 
    WHEN skl."impressions_sklik" IS NULL then 0 
    ELSE (skl."clicks_sklik"/skl."impressions_sklik") 
    END) as "CTR" 

하거나, 아무것도 작동 :

(case when skl."impressions_sklik" = 0 or skl."clicks_sklik" = 0 then 
skl."clicks_sklik"/skl."impressions_sklik" = 0 
    when skl."clicks_sklik" = '' or skl."impressions_sklik" = '' then 
skl."clicks_sklik"/skl."impressions_sklik" = 0 
    when skl."clicks_sklik" IS NULL or skl."impressions_sklik" IS NULL 
then skl."clicks_sklik"/skl."impressions_sklik" = 0 
    ELSE (skl."clicks_sklik"/skl."impressions_sklik") 
END) as "CTR" 
FROM "sklik" skl 

당신이 그 PLS 나를 도와 드릴까요?

전체 코드 :

SELECT 
adw."adwords" as "Type", 
adw."campaignID_adwords" as "campaignID", 
adw."impressions_adwords"as "impression", 
adw."CTR_adwords" as "CTR" 
FROM "adwords" adw 
UNION 
select 
skl."sklik" as "Type", 
skl."Campaign_id_sklik" as "campaignID", 
skl."impressions_sklik" as "impression", 
    (case when skl."impressions_sklik" = 0 then 0 
    when skl."clicks_sklik" = 0 then 0 
    when skl."clicks_sklik" = '' then 0 
    when skl."impressions_sklik" = '' then 0 
    ELSE (iff(skl."clicks_sklik" = 0 or skl."clicks_sklik" IS NULL or 
skl."clicks_sklik" = '', 0, skl."clicks_sklik")/
iff(skl."impressions_sklik" = 0 or skl."impressions_sklik" IS NULL or  
skl."impressions_sklik" = '', 0, skl."impressions_sklik")) 
END) as "CTR" 
FROM "sklik" skl 
UNION 
select 
fad."facebook_ads" as "Type", 
fad."cam_campaign_id_facebook_ads" as "campaignID", 
fad."cam_impressions_facebook_ads" as "impression", 
fad."cam_ctr_facebook_ads" as "CTR" 
FROM "facebook_ads" fad 

답변

0

현재 두 개의 별도의 문제가있다.

먼저 "impressions_sklik"및 "clicks_sklik"이 NUMERIC으로 정의 된 경우 텍스트 값 ''과 비교하는 것이 유효하지 않습니다. "숫자 값을 인식 할 수 없습니다."메시지가 나타납니다.

둘째, "impressions_sklik"이 NULL이면 CASE 문에서 0으로 나누기 문제가 발생합니다.

이 문제 모두를 해결하려면 훨씬 더 간단 다음과 같은 표현으로 재 작성하십시오

(case 
    when skl.impressions_sklik = 0 or skl.impressions_sklik IS NULL then 0 
    when skl.clicks_sklik = 0 or skl.clicks_sklik IS NULL then 0 
    ELSE (skl.clicks_sklik/skl.impressions_sklik) 
END) as CTR