2015-01-26 8 views
2

sql에서 isnull 또는 ifnull 문을 사용하는 방법을 알아낼 수 없습니다. a.Error1이 null이 아니면 말할 필요가 있습니다 - ' - ' 및 + CHAR(13)+CHAR(10)을 인쇄하십시오. 기본적으로 a.Error1이 null이되면 대시 또는 새로운 줄 바꿈이 없어야합니다. 필드가 null이 아니면 정보를 인쇄하십시오. ...
이 있었다 - 있고 Error2은 : Error1 -
를 예를 들면 다음과 같습니다 sql 사용 - select 문에서 null이 아님

select a. .... 
' - ' + a.Error1 + CHAR(13)+CHAR(10) + 
' - ' + a.Error2 + CHAR(13)+CHAR(10) + 
' - ' + a.Error3 + CHAR(13)+CHAR(10) + 
' - ' + a.Error4 + CHAR(13)+CHAR(10) + 
' - ' + a.Error5 + CHAR(13)+CHAR(10) + 
' - ' + a.Error6      as 'error_message' 
... 
from table1 a 

는 주어진 기록 error1을 위해, 2, 5 내가 다음과 같이 출력이되고 싶습니다 출력을 반환하는 경우 ...
- 오류 5 : 데이터가 ...

오류가없는 경우 단순히 비어 있거나 null 필드 여야합니다.

+0

중복 가능성 [열 제대로 T-SQL을 사용하여? 연결할 방법] (http://stackoverflow.com/questions/5235391/how-to-concatenate-columns-properly-using-t-sql) –

답변

4

당신은 CASE를 사용할 수 있습니다

SELECT a. .... 
     (CASE WHEN a.Error1 IS NOT NULL 
      THEN ' - ' + a.Error1 + CHAR(13)+CHAR(10) 
      ELSE '' 
     END) + 
     (CASE WHEN a.Error2 IS NOT NULL 
      THEN ' - ' + a.Error2 + CHAR(13)+CHAR(10) 
      ELSE '' 
     END) + 
     (CASE WHEN a.Error3 IS NOT NULL 
      THEN ' - ' + a.Error3 + CHAR(13)+CHAR(10) 
      ELSE '' 
     END) + 

    ...etc 
+0

값이 null 인 경우 평가와 같은 것을 사용할 방법이 없습니까? 그걸 바탕으로 출력물을 인쇄 할 수 있습니까? 또한 주어진 행에 대해 여러 개의 오류가 발생할 가능성이 있으므로 error1 및 error2 등을 포함하도록 출력이 필요합니다. 오류가 한 번 발견되면 다른 사례는 평가되지 않기 때문에 대소 문자를 사용할 수 없습니다. – Elizabeth

+0

@ 엘리자베스 '사례'는 'SQL 서버'로가는 길입니다. 그래서'a.Error1'이 null이면 어떤 출력을 원합니까? –

+0

a.Error1이 null 인 경우 공백 또는 공백 필드 만 있습니다. 그렇지 않으면 실제 값이 출력되어야한다. (모든 에러에 대해) – Elizabeth

0
SELECT (CASE WHEN a.Error1 IS NOT NULL 
      THEN ' - ' + a.Error1 + CHAR(13)+CHAR(10) + 
      ELSE a.Error1 
      END) + 
     (CASE WHEN a.Error2 IS NOT NULL 
      THEN ' - ' + a.Error2 + CHAR(13)+CHAR(10) + 
      ELSE a.Error2 
      END) + 
    .....etc 
1

COALESCE 기능은 여기에 원하는 것을. COALESCE의 결과는 전달 된 첫 번째 NOT NULL 값입니다. 아래에서 우리는 NULL과 구별되는 ''를 사용하여 외부 +가 항상 NOT NULL 문자열에 적용됩니다.

select a. .... 
    COALESCE(' - ' + a.Error1 + CHAR(13)+CHAR(10), '') + 
    COALESCE(' - ' + a.Error2 + CHAR(13)+CHAR(10), '') + 
    COALESCE(' - ' + a.Error3 + CHAR(13)+CHAR(10), '') + 
    COALESCE(' - ' + a.Error4 + CHAR(13)+CHAR(10), '') + 
    COALESCE(' - ' + a.Error5 + CHAR(13)+CHAR(10), '') + 
    COALESCE(' - ' + a.Error6 , '') as 'error_message' 
... 
from table1 a 
+0

당신은 왜 이것이 작동하고 다른 대답보다 낫지 않은지 설명해야한다. 즉, NULL과 연결하면 NULL이 반환된다. –