2016-11-25 2 views
0

을 작동하지 않습니다 :SQL의 CASE 텍스트 필드가 NULL 내가 SQL에서 다음과 같은 경우 문을 실행하기 위해 노력하고있어

CASE 
    WHEN P.Photos_Cloned_From IS NULL 
     THEN 'http://www.toolboxbarn.com/v/vspfiles/photos/'+P.ProductCode+'-2T.jpg' 
     ELSE 'http://www.toolboxbarn.com/v/vspfiles/photos/'+P.Photos_Cloned_From+'-2T.jpg' 
    END AS image_link, 

명령문의 작품을하지만 NULL하지 않은 레코드에 대한. NULL 인 항목의 경우 문이 THEN 조건을 반환하지 않습니다.

제안 사항?

+0

"THEN 조건을 반환하지 않음"이라고 말하면 레코드에서 반환되는 값이 정확하지 않거나 완전히 누락되었다는 의미입니까? –

+1

사용중인 데이터베이스에 질문을 태그하십시오. –

+0

아마도 null이 아니고 빈 문자열일까요? –

답변

1

어떤 일이 발생하는지 알려주세요.

'http://www.toolboxbarn.com/v/vspfiles/photos/'+ 
    COALESCE(P.Photos_Cloned_From,P.ProductCode,'DEFAULT')+'-2T.jpg' 
AS image_link, 

여기서 병합을 사용하면 case 문보다 낫습니다. 일부 플랫폼은 병합을 최적화 할 수 있으며 쉽게 기본값을 설정할 수 있습니다.

+0

나는 제안을 좋아하지만 궁극적으로 그것은 NULL과 같은 결과 일 것 ... ELSE ... COALESCE (THEN, ELSE)와 같음 – Matt

+0

@Matt - 아니요 두 번째 옵션 이후에 기본값이 있습니다. 이것은 우리 모두가 문제라고 생각하는 OP 코드와 함께 "두 null"문제를 해결할 것입니다. – Hogan

+0

사실 OP에 새로운 사례를 추가 할 수도 있지만, 문제의 원인이 될 가능성이있는 null을 제거한다고 말하는 것처럼 '기본'에 대해서는 생각하지 않았습니다. – Matt

1

@ hogan의 제안은 코드를 저장하는 훌륭한 방법이지만 새로운 '기본'사례를 소개하지 않는 경우 궁극적으로 사례 명세서와 동일한 결과를 가져야합니다. 가장 가능성이 높습니다 ProductCodeNULL 일 가능성이 있습니까?

string + NULL = NULL NULL은 SQL에서 알 수 없기 때문에 대부분의 db 플랫폼은 null이 집계되거나 연결될 때 전체 값을 무효화합니다. 귀하의 경우에는 표현의

Id ProductCode Photos_Cloned_From 
1 1    ClonedFrom 
2 2    Null 
3 NULL   Null 

결과와 호건의 제안은 다음과 같습니다 :

그래서 다음 테스트 케이스를 생각

1) ELSE 'http://www.toolboxbarn.com/v/vspfiles/photos/ClonedFrom-2T.jpg'

2) 'http://www.toolboxbarn.com/v/vspfiles/photos/2-2T.jpg '

3) WHEN NULL

+0

다시 내 대답을 봐, null, null 경우 실패하지 않습니다. – Hogan

+0

@Hogan true 내가 한 것과 빨리 읽었습니다. 새 사례 'default'가 포함되지 않은 경우 상태에 대한 답변을 업데이트했습니다. 결과가 동일 할 것입니다. – Matt

0
CASE WHEN ISNULL(P.Photos_Cloned_From,'') = '' THEN 'http://www.toolboxbarn.com/v/vspfiles/photos/'+P.ProductCode+'-2T.jpg' 
    ELSE 'http://www.toolboxbarn.com/v/vspfiles/photos/'+P.Photos_Cloned_From+'-2T.jpg' 
END AS image_link,