过去几个小时这一直困扰着我,我似乎无法找到答案..
我有以下查询
SELECT A, SUM(B) AS total
FROM table
GROUP BY A
现在表中的B列只能容纳0或1。 A是total1,total2或total3
现在,当我直接在SQL数据库中使用它时,我得到了一个很好的表格
A total
total1 1
total2 0
toatl3 5
这正是我想要的。 但是如果在我的c#程序中使用。如果其中一个总数为0则根本不显示.. 下面是我正在使用的代码,但只有当total1,total2和total3大于0时它才能正常工作 所以上面的表格只显示total1和total3 ...
string total = "A total";
SqlConnection conn = new SqlConnection("connection string goes here I know");
try
{
conn.Open();
SqlCommand total = new SqlCommand(
"SELECT A, SUM(B) AS total FROM table GROUP BY A", conn);
SqlDataReader total_reader = total.ExecuteReader();
while (total_reader.Read())
{
total += total_reader["A"].ToString() + " " + total_reader["total"] + "\n";
}
}
catch (Exception err)
{
serverstats += err.ToString();
}
finally
{
conn.Close();
}
我怎样才能使它正确显示表格,即使total1,total2和total3为0
因此显示:
A total
total1 0
total2 0
toatl3 0
我知道SQL中的0通常等于null等等。
我怀疑这就是C#假设如果值为0而不感兴趣的原因。
我希望我能够正确地解释它,感谢您提前提供任何帮助!
======= EDIT ==
COALESCE或ISNULL没有什么区别:(
我认为它与C#阅读器位不同,不在SQL查询位中。
正如您在我的示例中所看到的,SQL位DOES创建一个具有正确行的表,并且不将它们写为NULL。但是C#位似乎把它读成NULL。
答案 0 :(得分:2)
如果B列可以有空值,请尝试
SELECT A, COALESCE(SUM(B),0) AS total
FROM table
GROUP BY A
答案 1 :(得分:1)
或尝试编辑该行:
total += total_reader["A"].ToString() + " " + total_reader["total"] + "\n";
到
total += total_reader["A"].ToString() + " " + int.Parse(total_reader["total"].ToString()) + "\n";
答案 2 :(得分:0)
好的,事实证明我有WHERE(B = 1)
我忘了从我的SQL查询中删除它..
感谢您的帮助:)