如何将数据库表的总和获取到变量?
Posted
技术标签:
【中文标题】如何将数据库表的总和获取到变量?【英文标题】:How can i get the sum of a database table to a variable? 【发布时间】:2013-12-30 08:42:31 【问题描述】:我有一个名为Deposit
的数据库表,其中一个列名是30-12-2013
。该列有两个值,例如 54,26。
我想将该列的总和放入一个变量中。我使用以下代码:
con.Open();
SqlCeCommand cmd11 = con.CreateCommand();
cmd11.CommandText = "select sum(30-12-2013) from Deposit";
int result = ((int)cmd11.ExecuteScalar());
displaylabel.Text = result.ToString();
con.Close();
但是,我得到的变量“结果”的值为 -3990。
我的代码有什么问题..请帮助我..提前谢谢..
【问题讨论】:
您的栏目名称是30-12-2013
?我只是...为什么?
您有一个名为30-12-2013
的列名?请说不!
不到 24 小时,您的数据库表就会过时 :)
您的存款表应该有单独的日期/时间和金额列。然后只需使用SELECT SUM(amount) FROM Deposit WHERE ...
列名有什么问题..?
【参考方案1】:
(30-12-2013) * 2(因为你有两个条目)= -1995 * 2 = -3990
你必须使用:
SELECT sum([30-12-2013])
FROM dbo.Deposit
【讨论】:
抱歉,它们是受支持的 @ErikEJ - 好的,感谢您的澄清。删除了不相关的 cmets(关于明显冲突的 documentation)。 这个-1995是什么意思?【参考方案2】:这已经被回答了,所以我将提出一个替代解决方案,而不是回答你的实际问题。
而不是如下表:
SomeColumn | 30-12-2013 | 31-12-2013 | 01-01-2014
-----------+------------+------------+------------
A | 540 | 100 | 246
B | 130 | 90 | 377
有一个规范化的表:
SomeColumn | Date | Amount
-----------+------------+--------
A | 2013-12-30 | 540
A | 2013-12-31 | 100
A | 2014-01-01 | 246
B | 2013-12-30 | 130
B | 2013-12-31 | 90
B | 2014-01-01 | 377
这意味着您不需要每天都有一个新列。所以你的查询会变成:
SELECT SUM(Amount) AS Amount
FROM Deposit
WHERE Date = '20131230';
如果你想复制你的原始结构,你可以使用:
SELECT SomeColumn,
SUM(CASE WHEN Date = '20131230' THEN Amount ELSE 0 END) AS [30-12-2013],
SUM(CASE WHEN Date = '20131231' THEN Amount ELSE 0 END) AS [31-12-2013],
SUM(CASE WHEN Date = '20140101' THEN Amount ELSE 0 END) AS [01-01-2014]
FROM Deposit
GROUP BY SomeColumn;
Example on SQL Fiddle (使用 SQL Server,因为它不支持 SQL Server CE)
【讨论】:
谢谢你,先生..我明白了..你能告诉我有没有办法得到逐行总和..这样我就可以找到A存入的总金额, B,C..? 是的.. 但是,如果我在 datagridview 中显示表格,有什么方法可以使用循环..? 这听起来像是正在演变成一个新问题,因为我不立即明白你为什么要循环......我建议用你格式的数据提出一个新问题正在从数据库中检索它,您如何绑定到您的 gridview 以及您最终想要实现的目标。 我必须在 datagridview 中显示此表..这就是我问这个问题的原因.. 是的,这可能是你问这个问题的原因,但这不是你在这个问题中问的。这仍然是两个不同的问题。无论如何,有一个很好的方法不必重复列,规范化你的数据库,然后你可以在你的应用程序层中进行旋转,旋转 [像这样](sqlfiddle.com/#!6/b08e2/3) 或使用动态 SQL 来旋转数据。 【参考方案3】:尝试对具有不寻常名称的列使用方括号 -
cmd11.CommandText = "SELECT SUM([30-12-2013]) FROM Deposit";
【讨论】:
我无法使用 'dbo.Deposit'.. 错误显示为“表名无效”以上是关于如何将数据库表的总和获取到变量?的主要内容,如果未能解决你的问题,请参考以下文章