我正在使用SQL Server来创建我的数据库.
我想在我的表中添加一列来计算每行中NULL值的数量,如下所示:
Column1 | Column2 | Column3 | Score a | B | C | 0 x | NULL | NULL | 2
目前,我有这个:
Column1 | Column2 | Column3 a | B | C x | NULL | NULL
我创建了一个名为Score的新列,为了计算它,我使用了:
SELECT CASE WHEN Column1 IS NULL THEN 1 ELSE 0 END + CASE WHEN Column2 IS NULL THEN 1 ELSE 0 END + CASE WHEN Column3 IS NULL THEN 1 ELSE 0 END As TMP FROM MyTable
这将返回一个包含我所有行的列和每行的分数:
|TMP 1 |0 2 |2
我想使用这些值更新myTable中的列分数.
谢谢你的帮助.
您可以使用计算列 - 一个始终使用给定表达式计算的虚拟列,而不是存储在磁盘上.这样,您可以避免数据一致性问题.语法很简单:
CREATE TABLE myTab ( column1 datatype , column2 datatype ... , Score AS CASE WHEN Column1 IS NULL THEN 1 ELSE 0 END + CASE WHEN Column2 IS NULL THEN 1 ELSE 0 END + CASE WHEN Column3 IS NULL THEN 1 ELSE 0 END );
要更改现有表并添加此类列,请使用:
ALTER TABLE myTab ADD Score AS CASE WHEN Column1 IS NULL THEN 1 ELSE 0 END + CASE WHEN Column2 IS NULL THEN 1 ELSE 0 END + CASE WHEN Column3 IS NULL THEN 1 ELSE 0 END
资料来源:https://msdn.microsoft.com/en-us/library/ms188300.aspx