我正在使用包含大量 NULL 的 SQL Server 数据库。为了分析我的数据,我想提取数据库表的所有行,包括少于 x 个 NULL 标记(例如 x=2)。
我的数据库类似于这个结构:
c1 c2 c3 c4 c5
-----------------------------------------------------
2 3 NULL 1 2
2 NULL NULL 1 2
2 3 NULL NULL 2
NULL 3 NULL 1 NULL
2 3 NULL 1 2
Run Code Online (Sandbox Code Playgroud)
我尝试了查询,它没有返回错误,但没有选择任何行:
SELECT * FROM test123
WHERE ((ISNULL(c1,1) + ISNULL(c2,1) + ISNULL(c3,1) + ISNULL(c4,1) + ISNULL(c5,1)) < 2);
Run Code Online (Sandbox Code Playgroud)
我希望此查询返回第一行和第五行,但结果包含 0 行。
我无法测试以下代码,因为我没有在数据库上写入的权限,但这里有一个(伪)代码,用于创建像我这样的表:
CREATE TABLE test123(
c1 float,
c2 float,
c3 float,
c4 float,
c5 float
) GO
INSERT …Run Code Online (Sandbox Code Playgroud) 这是我的临时表:
CREATE TABLE #test123(
c1 float,
c2 float,
c3 float,
c4 float,
c5 float
);
INSERT #test123(c1,c2,c3,c4,c5)
VALUES (2,3,NULL,1,2),
(2,NULL,NULL,1,2),
(2,3,NULL,NULL,2),
(NULL,3,NULL,1,NULL),
(2,3,NULL,1,2);
Run Code Online (Sandbox Code Playgroud)
当我运行以下查询来替换第一列中的所有 NULL 时
INSERT INTO #test123 (c1) VALUES (ISNULL(c1,0));
Run Code Online (Sandbox Code Playgroud)
或者
INSERT INTO #test123 (c1) SELECT CASE WHEN c1 IS NULL THEN 0 END AS c1;
Run Code Online (Sandbox Code Playgroud)
我两次都收到错误“无效的列名 'c1'”。
的语法(来源)INSERT INTO是:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
Run Code Online (Sandbox Code Playgroud)