2013-03-29 7 views
0

버려진 통화에 대한 차원 테이블에 ID 1 코드 번호 2 ID 코드 이 ID를 팩트 테이블에로드할지 여부에 따라이 ID를로드하려고합니다. 호출은 결합을 사용하여 포기되었습니다.차원 테이블에서 팩트 테이블의 ID 설정

어떻게 문제가 발생했는지 데이터베이스에있는 포기 된 값이 NO의 경우 NULL이고 YES의 경우 1입니다.

그래서 내가

INNER JOIN datamartend.dbo.Abandoned_Call_Dim 
     ON incoming_measure.Abandoned = Abandoned_Call_Dim.abandoned_code 

그것은 어떤 결과를 당겨하지있어 가입 할 때?

아이디어가 있으십니까?

기본적으로 필요한 것은 다음과 같습니다

내가 측정에서은 버려 값이 null null을

감사

+0

당신은 테이블'incoming_measure'와'Abandoned_Call_Dim' 모두 널 (NULL)가 말하는 ? 쿼리의 다른 섹션이이 동작을 담당 할 수 있으므로 더 많은 쿼리를 표시 할 수 있습니까? – whytheq

+0

호출이 취소되지 않은 경우 메인 테이블의 null 만 표시됩니다. 포기하지 않은 이드의 버려진 점은 3 입니다. 주 테이블의 버려진 곳과 치수가 2 인 경우에는 1이됩니다. 주전원의 값을 차원 ID와 비교하는 방법을 알지 못합니까? –

+0

당신은 조인의 섹션을'ISNULL (MAINCALLTABLE.Abandoned, 3)'로 대체 할 수 없습니까? – whytheq

답변

0

하지 않을 경우 ID 2를 포기하면 포기 차원에서 버려진 ID 2가되고 싶어요 절은이 문제를 해결 얻을 때 당신은 CASE를 사용할 수 있습니다 (또는 ISNULL하지만, 사건은 때 다른 DB 엔진에서 더 휴대용)

INNER JOIN datamartend.dbo.Abandoned_Call_Dim 
     ON case when incoming_measure.Abandoned is null then '0' 
       else incoming_measure.Abandoned end 
      = case when Abandoned_Call_Dim.abandoned_code is null then '0' 
       else Abandoned_Call_Dim.abandoned_code end 

이 의지 R 0으로 null을 입력하십시오. 0 코드가 없으면 정상이어야합니다. 그렇게 할 경우, -1을 시도하거나 가능한 코드 세트에없는 다른 값을 사용하십시오.

당신이 코드의 알 수없는 세트가 가입하고 추가 할 것이있는 경우에 할 수있는 또 다른 것은 : 기술적으로 참여하지 않는

OR (incoming_measure.Abandoned is null and Abandoned_Call_Dim.abandoned_code is null) 

- 그것은 건너가 널 기록을 조인 (그리고만큼 버려진 전화 흐림에 문제가있는 단 하나의 null이 있습니다. 괜찮습니다).

+0

고맙습니다. 최상위 코드와 그 실행 중입니다. "varchar 값 'Unknown'을 데이터 형식 int로 변환 할 때 변환이 실패했습니다." 나는 이해할 수 없습니다. 둘다 varchar입니까? –

+0

내 편집을 참조하십시오. 당신이 varchar로 저장하고 있기 때문에 0 주위에 따옴표를 추가했습니다.예를 들어, 차원이 NO를 0으로 저장하지만 사실 테이블 열이 null 인 경우 필요에 따라 수정하십시오. –

0

가입하기 전에 ID에 디코드 기능을 사용할 수 있는지 여부를 확인할 수 있습니다.

디코드 (값) = 조인 C 럼이

또는 COALESCE를 사용해보십시오 (REPLACE (COL, VAL_TO_B_REPLACE_IF_NOT_NULL), VALUE_TO_REPLCE_WHEN_NULL)