2012-09-20 3 views
0

가능한 중복 :
How to count in SQL all fields with null values in one record?카운트 수

내가 가지고있는 다섯 개의 열 테이블 :

 
Name  DOB Email  phone jobtitle 
abc  null [email protected]  null  null 
bbc  null null  null  null 

어떻게 쓰기 않는 쿼리 그래서 내가 행에 null 열의 번호를 찾을 수 있습니까?

(예 : 1 행 3 NULL 값을 갖는되고, 2 행 4 개 NULL 값을 가지고있다.)

내가 SQL 서버에게 2008

+2

에 오신 것을 환영의 각을 지정하는 것입니다. 문제가 어디에 있습니까? 너 뭐 해봤 니? – stb

+0

76 개의 열이있는 온라인 양식이 있습니다. 후보자가 30 명을 채우면 양식의 비율을 표시해야합니다. – vikas

+0

감사합니다. 마틴이 맞았습니다. – vikas

답변

1

순진 방법을 사용하고 :

SELECT CASE WHEN Name IS NULL THEN 1 ELSE 0 END + 
    CASE WHEN DOB IS NULL THEN 1 ELSE 0 END +  
    CASE WHEN Email IS NULL THEN 1 ELSE 0 END +  
    CASE WHEN phone IS NULL THEN 1 ELSE 0 END +  
    CASE WHEN jobtitle IS NULL THEN 1 ELSE 0 END 

을 그러나 저는이 중 76 점을 쓰고 싶지 않습니다. 그래서 동적 인 방법 (테스트되지 않은,하지만이 라인을 따라 뭔가)에 대한 방법 :

DECLARE @SQL NVARCHAR(4000);  
SET @SQL = 'SELECT theTable.ID, ' + 
    STUFF((SELECT '+ CASE WHEN ' + QUOTENAME(COLUMN_NAME) + 
     ' IS NULL THEN 1 ELSE 0 END' 
     FROM INFORMATION_SCHEMA.COLUMNS 
     WHERE TABLE_NAME = 'theTable' FOR XML PATH('')) , 1 , 1 , '') 
    + ' FROM theTable';  
EXEC(@SQL); 
+1

이것은 예제입니다. 내 테이블에 76 컬럼이 있습니다. – vikas

+6

SQL 서버에서 'IF'가 쿼리에서 유효하지 않습니다. –

+0

@AaronBertrand 예 예, 당신 말이 맞습니다. –

-2

내가 생각하는 유일한 방법은 열

select sum(case when item1 is null then 1 else 0 end 
      +case when item2 is null then 1 else 0 end 
      +case when item3 is null then 1 else 0 end 
      +case when item4 is null then 1 else 0 end 
      +case when item5 is null then 1 else 0 end 
      +case when item6 is null then 1 else 0 end 
     ) as grandtotalnulls 
    from yourtable 
+0

'CASE'표현식을 쓰지 않고이 작업을 수행 할 수있는 방법이 있습니다 (그리고 이전의 솔루션과 어떻게 다른가요?). 제발 [중복 봐] (http://stackoverflow.com/questions/9079037/how-to-count-in-sql-all-fields-with-null-values-in-one-record). –