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 是否链接到其他一些后端数据库(因为如果是,这一切都会容易得多)。