计算SQL中每列中的NULL值的数量

前端之家收集整理的这篇文章主要介绍了计算SQL中每列中的NULL值的数量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试编写一个脚本,该脚本将显示每列中的非空值的数量以及表中的总行数.

我找到了几种方法来做到这一点:

SELECT sum(case null_column为null然后是1 else 0)“Null Values”,
sum(case null_column null时然后0 else 1)“Non-Null Values”
来自my_table;

SELECT count(*)FROM my_table WHERE my_column IS NULL
UNION ALL
SELECT count(*)FROM my_table WHERE my_column IS NOT NULL

但这些要求我手动输入每个列名.有没有办法为每个列执行此操作而不列出它们?

解决方法

正如保罗所说,但这是一个例子:
  1. DECLARE @TableName VARCHAR(512) = 'invoiceTbl';
  2. DECLARE @sql VARCHAR(1024);
  3. WITH sqlText AS (
  4. SELECT
  5. ROW_NUMBER() OVER (ORDER BY c.Name) AS RowNum,'SELECT ''' + c.name + ''',SUM(CASE WHEN ' + c.Name + ' IS NULL THEN 1 ELSE 0 END) AS NullValues FROM ' + @TableName AS sqlRow
  6. FROM
  7. sys.tables t
  8. INNER JOIN sys.columns c ON c.object_id = t.object_id
  9. WHERE
  10. t.name = @TableName),Recur AS (
  11. SELECT
  12. RowNum,CONVERT(VARCHAR(MAX),sqlRow) AS sqlRow
  13. FROM
  14. sqlText
  15. WHERE
  16. RowNum = 1
  17. UNION ALL
  18. SELECT
  19. t.RowNum,r.sqlRow + ' UNION ALL ' + t.sqlRow)
  20. FROM
  21. sqlText t
  22. INNER JOIN Recur r ON t.RowNum = r.RowNum + 1
  23. )
  24. SELECT @sql = sqlRow FROM Recur WHERE RowNum = (SELECT MAX(RowNum) FROM Recur);
  25. EXEC(@sql);

猜你在找的MsSQL相关文章