2017-03-02 1 views
0

저는 CASE를 자주 사용하지 않지만 매우 간단한 쿼리를 사용합니다.이 값이 NULL 일 때 일반적인 문을 반환하고 싶습니다. 나는 아래에 작성한 모든 오류가 있지만 NULL 값을 중 하나를 catch하지 않습니다. 나는 그것이 수천 인 것처럼 기사의 목록을 짧게했지만 누군가 내가 잘못하고있는 것을 지적 할 수 있기를 바랬다. 미리 감사드립니다.사례 및 NULLS 문제

**USE Asag_Reporting 

    GO 

SELECT DISTINCT ARTICLE_NUMBER, 
       CASE PM_NAME 
       WHEN NULL THEN 'No PM Available' 
       ELSE PM_NAME 
       END AS 'PM_NAME' 
FROM vw_GIM_Articles 
WHERE ARTICLE_NUMBER IN ('15110', 
'19228', 
'34563', 
'36516');** 
+0

'PM_Name이 NULL 인 경우 'PM을 사용할 수 없음', 'PM_Name end'이 작동해야합니다. 트릭은 항상 그렇듯이'is NULL' 또는'is not NULL'입니다. '합치다 '는 더 적절하다. – HABO

답변

3

더 많은 생각을하고 나면, 아래에서 쓴 것보다 더 선호 할 것입니다.

SELECT DISTINCT ARTICLE_NUMBER, 
       COALESCE(PM_NAME, 'No PM Available') AS [PM_NAME] 
FROM vw_GIM_Articles 
WHERE ARTICLE_NUMBER IN ('15110','19228','34563','36516'); 

이보십시오.

SELECT DISTINCT ARTICLE_NUMBER, 
       CASE 
       WHEN PM_NAME IS NULL THEN 'No PM Available' 
       ELSE PM_NAME 
       END AS [PM_NAME] 
FROM vw_GIM_Articles 
WHERE ARTICLE_NUMBER IN ('15110', 
'19228', 
'34563', 
'36516'); 
+0

완벽하게 작동했습니다! -이 시나리오에서 IFNULL을 사용하는 것이 훨씬 간단하다는 것을 알았지 만 다가올 일에 대해 생각하고 있습니다. 왜 괄호가 여기에 차이가 나는지 설명 할 수 있다면 궁금합니다. 나는 이것이 컬럼 이름 대 칼럼의 값이어야 함을 의미한다고 가정하고있다. 다시 한 번 감사드립니다 – user3496218

+1

나는 당신이'COALESCE (PM_NAME, 'No PM Avaliable') AS [PM_NAME]'을 사용하도록 제안합니다. – DVT

+1

@ user3496218 대괄호는 이름이 이름이고 모두 처리해야 함을 나타내는 Microsoft의 방법입니다 (중간에 공백이있는 경우를 대비하여). 이는 Microsoft의 T-SQL에만 적용됩니다. ANSI 표준은 ""이지만 SQL Server에서 QUOTED_IDENTIFIER와 관련된 이상한 오류가 발생할 수도 있습니다 (한 번 본 적이 있지만 이해하지 못했지만 여전히 그렇지 않습니다). 자세한 내용은 여기를 참조하십시오. http://www.nigelpsammy.com/2014/03/significance-of-square-brackets-in-t.html – DVT