[SQL] 어떻게 하나 개의 레코드에 SQL에 널 (null) 값으로 모든 필드를 계산하려면?
SQL어떻게 하나 개의 레코드에 SQL에 널 (null) 값으로 모든 필드를 계산하려면?
기본 키 열을 제외한 특정 레코드에 대한 널 (null) 값으로 모든 필드를 계산하는 방법은 없나요?
Example:
ID Name Age City Zip
1 Alex 32 Miami NULL
2 NULL 24 NULL NULL
출력으로 나는 명시 적으로 열 이름을 지정하지 않고 1과 3을 얻을 필요가있다.
해결법
-
==============================
1.
declare @T table ( ID int, Name varchar(10), Age int, City varchar(10), Zip varchar(10) ) insert into @T values (1, 'Alex', 32, 'Miami', NULL), (2, NULL, 24, NULL, NULL) ;with xmlnamespaces('http://www.w3.org/2001/XMLSchema-instance' as ns) select ID, ( select * from @T as T2 where T1.ID = T2.ID for xml path('row'), elements xsinil, type ).value('count(/row/*[@ns:nil = "true"])', 'int') as NullCount from @T as T1
결과:
ID NullCount ----------- ----------- 1 1 2 3
최신 정보:
여기에 더 나은 버전입니다. 마틴 스미스에게 감사드립니다.
;with xmlnamespaces('http://www.w3.org/2001/XMLSchema-instance' as ns) select ID, ( select T1.* for xml path('row'), elements xsinil, type ).value('count(/row/*[@ns:nil = "true"])', 'int') as NullCount from @T as T1
최신 정보:
그리고 조금 더 빠른 XQuery 표현식으로.
;with xmlnamespaces('http://www.w3.org/2001/XMLSchema-instance' as ns) select ID, ( select T1.* for xml path('row'), elements xsinil, type ).value('count(//*/@ns:nil)', 'int') as NullCount from @T as T1
-
==============================
2.
SELECT id, CASE WHEN Name IS NULL THEN 1 ELSE 0 END + CASE WHEN City IS NULL THEN 1 ELSE 0 END + CASE WHEN Zip IS NULL THEN 1 ELSE 0 END FROM YourTable
당신이 쿼리에서 명시 적으로 열 이름을 원하지 않는 경우, 동적 쿼리에 오신 것을 환영합니다
DECLARE @sql NVARCHAR(MAX) = '' SELECT @sql = @sql + N' CASE WHEN '+QUOTENAME(c.name)+N' IS NULL THEN 1 ELSE 0 END +' FROM sys.tables t JOIN sys.columns c ON t.object_id = c.object_id WHERE c.is_nullable = 1 AND t.object_id = OBJECT_ID('YourTableName') SET @sql = N'SELECT id, '+@sql +N'+0 AS Cnt FROM [YourTableName]' EXEC(@sql)
-
==============================
3.이 문제를 해결해야한다 :
이 문제를 해결해야한다 :
select count (id) where ( isnull(Name,"") = "" or isnull(City,"") = "" or isnull(Zip,"") = "" )
아니 스마트 솔루션,하지만 일을해야한다.
-
==============================
4.
DECLARE @tempSQL nvarchar(max) SET @tempSQL = N'SELECT ' SELECT @tempSQL = @tempSQL + 'sum(case when ' + cols.name + ' is null then 1 else 0 end) "Null Values for ' + cols.name + '", sum(case when ' + cols.name + ' is null then 0 else 1 end) "Non-Null Values for ' + cols.name + '",' FROM sys.columns cols WHERE cols.object_id = object_id('TABLE1'); SET @tempSQL = SUBSTRING(@tempSQL, 1, LEN(@tempSQL) - 1) + ' FROM TABLE1;' EXEC sp_executesql @tempSQL
from https://stackoverflow.com/questions/9079037/how-to-count-in-sql-all-fields-with-null-values-in-one-record by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 SQL에서 지난 주 마지막 날을 얻으려면? (0) | 2020.05.25 |
---|---|
[SQL] SQL에 소계 행을 추가하는 방법 [마감] (0) | 2020.05.25 |
[SQL] 분할 문자열 행 오라클 SQL로 (0) | 2020.05.24 |
[SQL] C # SQL 삽입 명령 (0) | 2020.05.24 |
[SQL] 두 번째 필드를 자동 증가로 두 필드의 SQL 서버 고유 복합 키 (0) | 2020.05.24 |