如何将数据库表的总和获取到变量?

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'.. 错误显示为“表名无效”

以上是关于如何将数据库表的总和获取到变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取脚本以将 2 个变量的总和添加到表格中的第三列

MySQL JOIN 2 个表并分别获取两个表的总和

是否可以通过 Power BI 获取数据透视表的来源?

将联合与laravel结合使用时如何获得两个不同表的总和

QueryBuilder:数据透视表的总和值

通过 group by 和 joins 获取多个表的多个列的总和