我有一个名为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();
但是,我得到变量'result'的值为-3990。
我的代码有什么问题..请帮助我..提前致谢..
答案 0 :(得分:16)
(30-12-2013)* 2(因为你有两个条目)= -1995 * 2 = -3990
你必须使用:
SELECT sum([30-12-2013])
FROM dbo.Deposit
答案 1 :(得分:6)
尝试为具有不寻常名称的列使用括号 -
cmd11.CommandText = "SELECT SUM([30-12-2013]) FROM Deposit";
答案 2 :(得分:6)
这已经得到了回答,所以我没有回答你的实际问题,而是提出另一种解决方案。
而不是如下表所示:
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)