먼저 나는 몇 가지 샘플 데이터
IF OBJECT_ID('COuntNotNull') IS NOT NULL
Drop Table COuntNotNull
;With cte(Column1 , Column2 , Column3 , Column4)
AS
(
SELECT 'X' , ' X' , NULL , 'X' Union all
SELECT NULL , NULL , 'X' , 'X' Union all
SELECT NULL , NULL , NULL , NULL
)
SELECT * INTO COUNTNOTNULL FROM cte
아래의 코드로 테이블을 생성 주어진 테이블의 동적 열 이름을 얻고 null 이외의 카운트 값 얻을
DECLARE @DynamicColms NVARCHAR(max)
,@CaseDynamicColms NVARCHAR(max)
,@Sql NVARCHAR(max)
,@TableName VARCHAR(100) = 'COuntNotNull'--Here give Your TableName
SELECT @DynamicColms = STUFF((
SELECT ', ' + COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TableName
FOR XML PATH('')
), 1, 1, '')
--SELECT @DynamicColms
SELECT @CaseDynamicColms = STUFF((
SELECT '+ ' + 'CASE WHEN ' + COLUMN_NAME + ' IS NOT NULL THEN 1 ELSE 0 END'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TableName
FOR XML PATH('')
), 1, 1, '')
--SELECT @CaseDynamicColms
SET @Sql = 'SELECT ' + @DynamicColms + ',' + @CaseDynamicColms + CHAR(13) + CHAR(10) + ' AS COUNT_NOT_NULL FROM ' + @TableName
PRINT @Sql
EXECUTE (@Sql)
결과
Column1 Column2 Column3 Column4 COUNT_NOT_NULL
-------------------------------------------------
X X NULL X 3
NULL NULL X X 2
NULL NULL NULL NULL 0
동적 SQL을 사용하여 연결된 대답은 그렇지 않습니다. 실제로 스크립트가 무엇을하는지 생각하면 스크립트가 작동하지 않는 이유를 알 수 있습니다. – iamdave
다음은 [동적 SQL] (https://docs.microsoft.com/en-us/sql/odbc/reference/dynamic-sql)의 MS Docs에 대한 링크입니다. –
@RamonLeonardi 그 wolud 귀하의 요구 사항으로 결과를 얻을 희망이 –