计算每行有多少列“不为空”,并将该信息放入另一列中
本文关键字:信息 一列 多少 不为空 计算 | 更新日期: 2023-09-27 18:32:19
我是SQL的新手,并且已经开始了一个测试项目来亲自动手使用SQL和C#。我一直在使用VS2012的数据库向导来设置所有内容。所以这是我的设置的概要。
SQL CE 表名为 ACDTable
,它通过数据集dataSet1
和表适配器连接到我的 C# 项目dataTableAdapter
ACDTable
有 22 列,我试图做的是对于我指定的每列都有一个值(不为 null)的每一行,它将一添加到计数器中,然后将总和添加到我指定的另一列中。
本质上,我需要找到每行有多少列不为 null,并将该数字转换为 C# 中可用的数字。
例:
|Col1 | Col2 | Col3| Col4| Col5|
| | | | | |
| x | x | | x | 3 |
| | x | x | | 2 |
| x | | | | 1 |
我正在使用示例 每行中的非空列计数,如果我只是通过 SQL 将其作为查询运行,它确实效果很好。
我正在使用的示例:
SELECT Col1,
Col2,
Col3,
Col4,
CASE WHEN Col1 IS NOT NULL THEN 1 ELSE 0 END +
CASE WHEN Col2 IS NOT NULL THEN 1 ELSE 0 END +
CASE WHEN Col3 IS NOT NULL THEN 1 ELSE 0 END +
CASE WHEN Col4 IS NOT NULL THEN 1 ELSE 0 END AS Col5
FROM ACDTable
我遇到的问题是,当我使用 Visual Studio 创建基于此查询的方法时,我尝试通过该方法获取Col5
的值,我得到了一个 NullDB 异常。如果我在调用该方法后运行调试器并查看表,则Col5
为完全 null。我有一种感觉,问题是查询本身实际上并没有改变第 5 列,但我对 SQL 缺乏经验,我无法找出正确的语法来解决这个问题。
修复了我在选择列表中有 Col5 的拼写错误
编辑以显示我正在使用的代码
该方法本身是 Visual Studio 使用表适配器中的"添加查询"选项生成的方法。如果我理解正确,应该运行上述查询,然后将值放入Col5
中。然后,我只想使用
GetTotals(); //The Generated method from VS that runs my query
var totals = from p in dataTable select p.Col5;
foreach (var total in totals)
{
testTextBox.Text = total
}
如果我正确理解了您的评论,那么我就知道问题出在哪里了。此时,您只是从表中选择值,而不将任何值写入其中。执行此操作的一种方法是创建 UPDATE 查询并将 Col5 的值设置为 case 语句。
UPDATE ACDTable
SET Col5 = CASE WHEN....
我想你知道如何完成这个。如果有必要,您仍然可以在末尾添加 WHERE 子句。
您在选择列表中Column 5
了两次。 一次作为命名列,一次作为计算列。 您是在创建这篇文章时打错字,还是以这种方式在您的代码中?
因为 Col5 没有案例(条件)。你有col1,col2,col3,col4,没有col5,你只是将col4名称指定为col5,在这种情况下这是一个坏主意。