2 列的总和值 OLEDB ACCESS
Sum values of 2 columns OLEDB ACCESS
伙计们,我正在做一个简单的捐赠项目。我需要将捐款的价值 table 添加到收银员的总价值中。我做了一些测试,但不能。按照下面的代码。
private void bntAddDonation_Click(object sender, EventArgs e)
{
connection = new OleDbConnection(db);
try
{
connection.Open();
query = "UPDATE CX SET CX.Valor_Caixa = (SELECT SUM (DONATION.Valor_Contribuicao) FROM Contribuicao DONATION WHERE DONATION.Id_Caixa = CX.Id_Caixa) FROM Caixa CX";
cmd = new OleDbCommand(query, connection);
cmd.ExecuteNonQuery();
connection.Close();
MessageBox.Show("Contribuição adicionada com sucesso!");
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
捕获错误
Syntax error (missing operator) in query expression '(SELECT SUM (DONATION.Valor_Contribuicao) FROM Contribuicao DONATION WHERE
DONATION.Id_Caixa = CX.Id_Caixa) FROM CAIXA CX
除非我完全错过了你的 table 结构,否则你的更新语句不起作用。这是 运行 您在代码中列出的查询以及 .NET 抛出的相同错误的屏幕截图:
所以这是我的想法...创建一个查询,在目标 table 中得出您想要的总计。从字面上看你有什么,看起来像这样:
SELECT CAIXA.Id_Caixa, Sum(Contribuicao.Valor_Contribuicao) AS SumOfValor_Contribuicao
FROM CAIXA INNER JOIN Contribuicao ON CAIXA.Id_Caixa = Contribuicao.Id_Caixa
GROUP BY CAIXA.Id_Caixa;
我不确定为什么需要 CAIXA
,因为连接条件在 Id_Caixa
字段上,但为了连续性,我将其保留在那里。
我最初的想法是针对此查询(有点像视图)执行更新查询,但它引发了一些奇怪的错误,我不得不将上面的查询转换为 make-table 查询:
SELECT CAIXA.Id_Caixa, Sum(Contribuicao.Valor_Contribuicao) AS SumOfValor_Contribuicao INTO Totals
FROM CAIXA INNER JOIN Contribuicao ON CAIXA.Id_Caixa = Contribuicao.Id_Caixa
GROUP BY CAIXA.Id_Caixa;
所以生成的 table 被命名为 Totals
.
从这里开始,一个简单的更新查询应该会更新这些总数。请注意语法与您上面列出的非常不同...
UPDATE CAIXA
INNER JOIN Totals ON CAIXA.Id_Caixa = Totals.Id_Caixa
SET CAIXA.Valor_Caixa = [Totals].[SumOfValor_Contribuicao];
这对我有用,前提是@madreflection 是正确的,我猜是这样。
您确定这是 MS Access 吗? None 这看起来像 Access。 Access 是否链接到其他一些后端数据库(因为如果是,这一切都会容易得多)。
伙计们,我正在做一个简单的捐赠项目。我需要将捐款的价值 table 添加到收银员的总价值中。我做了一些测试,但不能。按照下面的代码。
private void bntAddDonation_Click(object sender, EventArgs e)
{
connection = new OleDbConnection(db);
try
{
connection.Open();
query = "UPDATE CX SET CX.Valor_Caixa = (SELECT SUM (DONATION.Valor_Contribuicao) FROM Contribuicao DONATION WHERE DONATION.Id_Caixa = CX.Id_Caixa) FROM Caixa CX";
cmd = new OleDbCommand(query, connection);
cmd.ExecuteNonQuery();
connection.Close();
MessageBox.Show("Contribuição adicionada com sucesso!");
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
捕获错误
Syntax error (missing operator) in query expression '(SELECT SUM (DONATION.Valor_Contribuicao) FROM Contribuicao DONATION WHERE DONATION.Id_Caixa = CX.Id_Caixa) FROM CAIXA CX
除非我完全错过了你的 table 结构,否则你的更新语句不起作用。这是 运行 您在代码中列出的查询以及 .NET 抛出的相同错误的屏幕截图:
所以这是我的想法...创建一个查询,在目标 table 中得出您想要的总计。从字面上看你有什么,看起来像这样:
SELECT CAIXA.Id_Caixa, Sum(Contribuicao.Valor_Contribuicao) AS SumOfValor_Contribuicao
FROM CAIXA INNER JOIN Contribuicao ON CAIXA.Id_Caixa = Contribuicao.Id_Caixa
GROUP BY CAIXA.Id_Caixa;
我不确定为什么需要 CAIXA
,因为连接条件在 Id_Caixa
字段上,但为了连续性,我将其保留在那里。
我最初的想法是针对此查询(有点像视图)执行更新查询,但它引发了一些奇怪的错误,我不得不将上面的查询转换为 make-table 查询:
SELECT CAIXA.Id_Caixa, Sum(Contribuicao.Valor_Contribuicao) AS SumOfValor_Contribuicao INTO Totals
FROM CAIXA INNER JOIN Contribuicao ON CAIXA.Id_Caixa = Contribuicao.Id_Caixa
GROUP BY CAIXA.Id_Caixa;
所以生成的 table 被命名为 Totals
.
从这里开始,一个简单的更新查询应该会更新这些总数。请注意语法与您上面列出的非常不同...
UPDATE CAIXA
INNER JOIN Totals ON CAIXA.Id_Caixa = Totals.Id_Caixa
SET CAIXA.Valor_Caixa = [Totals].[SumOfValor_Contribuicao];
这对我有用,前提是@madreflection 是正确的,我猜是这样。
您确定这是 MS Access 吗? None 这看起来像 Access。 Access 是否链接到其他一些后端数据库(因为如果是,这一切都会容易得多)。