如何将数据库表的总和变为变量?

Jay*_*abu 5 c# sql sql-server sql-server-ce

我有一个名为的数据库表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();
Run Code Online (Sandbox Code Playgroud)

但是,我得到变量'result'的值为-3990.

我的代码有什么问题..请帮帮我..先谢谢..

Rom*_*kin 16

(30-12-2013)*2(因为你有两个条目)= -1995*2 = -3990

你必须使用:

SELECT sum([30-12-2013])
FROM   dbo.Deposit 
Run Code Online (Sandbox Code Playgroud)


Dev*_*art 6

尝试为具有不寻常名称的列使用括号 -

cmd11.CommandText = "SELECT SUM([30-12-2013]) FROM Deposit";
Run Code Online (Sandbox Code Playgroud)


Gar*_*thD 6

这已经得到了回答,所以我没有回答你的实际问题,而是提出另一种解决方案.

而不是如下表:

SomeColumn | 30-12-2013 | 31-12-2013 | 01-01-2014
-----------+------------+------------+------------
    A      |    540     |    100     |    246
    B      |    130     |     90     |    377
Run Code Online (Sandbox Code Playgroud)

有一个规范化的表格:

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
Run Code Online (Sandbox Code Playgroud)

这意味着您每天都不需要新列.所以你的查询将成为:

SELECT  SUM(Amount) AS Amount
FROM    Deposit
WHERE   Date = '20131230';
Run Code Online (Sandbox Code Playgroud)

如果您想重现原始结构,可以使用:

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;
Run Code Online (Sandbox Code Playgroud)

关于SQL小提琴的示例 (使用SQL Server,因为它不支持SQL Server CE)