количество столбцов, в которых есть данные для каждой строки - PullRequest
2 голосов
/ 26 ноября 2010

У меня есть таблица с 8 столбцами и 5000+ строк.

Мне понадобилась помощь в написании t-sql select, который бы подсчитывал для каждой строки количество столбцов, которые не равны нулю.

Ответы [ 2 ]

2 голосов
/ 26 ноября 2010

Чистый Transact SQL (без использования динамического вызова SQL, который не является частью TSQL):

SELECT 
    CASE WHEN c1 IS NULL THEN 0 ELSE 1 END
  + CASE WHEN c2 IS NULL THEN 0 ELSE 1 END
  + CASE WHEN c3 IS NULL THEN 0 ELSE 1 END
  + CASE WHEN c4 IS NULL THEN 0 ELSE 1 END
  + CASE WHEN c5 IS NULL THEN 0 ELSE 1 END
  + CASE WHEN c6 IS NULL THEN 0 ELSE 1 END
  + CASE WHEN c7 IS NULL THEN 0 ELSE 1 END
  + CASE WHEN c8 IS NULL THEN 0 ELSE 1 END
FROM T
1 голос
/ 26 ноября 2010

Попробуйте, заменив два вхождения «Каталога» именем вашей таблицы.Это было успешно протестировано на SQL Server 2008 R2 Dev Edition в базе данных ReportServer по умолчанию.

DECLARE @Sql nvarchar(max)
SET @Sql = 'SELECT 0'

SELECT
    @Sql = @Sql + '
+ CASE WHEN [' + [sys].[columns].[name] + '] IS NULL THEN 1 ELSE 0 END'
FROM [sys].[columns]
WHERE [sys].[columns].[object_id] = OBJECT_ID('Catalog')
    AND [sys].[columns].is_nullable = 1

SET @Sql = @Sql + '
AS [NullValuesCount] FROM [Catalog]'

PRINT @Sql

EXEC sp_executesql @Sql

Обратите внимание, что этот подход подвержен атаке SQL-инъекции, если вы не можете доверять источнику столбцаимена (например, если конечные пользователи могут создавать столбцы с именами под своим контролем).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...