【问题标题】:Adding values returned by SQL query to get the total?将 SQL 查询返回的值相加得到总数?
【发布时间】:2014-05-27 14:17:51
【问题描述】:

我有一个函数可以根据订单 ID 从 SQL 表中获取用户订单的每个商品的数量和重量:

protected decimal getOrderWeight(int orderid)
{
    string sqlCmd = "SELECT Weight, Quantity FROM OrderItems WHERE OrderId = @OrderId";
    int qty = 0;
    decimal wgt = 0;
    decimal totalWeight = 0;
    using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["AbleCommerce"].ToString()))
    {
        cn.Open();
        SqlCommand cmd = new SqlCommand(sqlCmd, cn);
        cmd.Parameters.AddWithValue("@OrderId", orderid);
        using (IDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                qty = Convert.ToInt32(reader["Quantity"]);
                wgt = Convert.ToDecimal(reader["Weight"]);     
                totalWeight = qty * wgt;
            }
            cn.Close();
        }
    }
    return totalWeight;
}

在表(称为 OrderItems)中,每个项目都有一个数量和一个重量。但是,表中显示的重量不是重量 * 数量的结果(即,对于订单 #12345,ABC 项目的数量为 6,每个 ABC 项目重 1.00 磅)。我创建的函数的工作原理是将每个订单商品的数量乘以重量(即所有 6 件 ABC 商品的总重量为 6.00 磅)

但是,我现在需要将这些总重量值相加,以获得整个订单的总重量。现在,我按顺序返回所有重量: 6.00, 5.00, 2.80, 146.76, 6.02, 2.25

但我不确定如何将所有这些加在一起?我正在考虑做一个 Split() 但后来我会将小数转换为字符串,只是为了将它们转换回小数,以便在“拆分”后将它们加在一起。这似乎非常复杂......有没有更好的方法?

【问题讨论】:

  • 如果您只是将计算行更改为totalWeight += qty * wgt;,您的代码会不会这样做?

标签: c# sql sql-server add


【解决方案1】:

这是你要找的吗?

SELECT sum(Weight * Quantity) as TotalWeight
FROM OrderItems
WHERE OrderId = @OrderId;

如果是这样,这是一个聚合查询的示例,它是一个基本的 SQL 概念。您应该在数据库中执行此类工作,因为数据库经过优化,可以处理大量数据并从表中提取此类结果。

【讨论】:

  • @SaraDeJaneiro 这会将应用程序逻辑从代码转移到数据库,我认为现在这是一种不好的做法。恕我直言,最好的方法是使用 LINQ 在业务层中完成此计算。跨度>
  • 这正是我想要的。这比我想象的要容易得多......谢谢!
  • @Oscar 我猜,在少数情况下(如这个解决方案)使用DataBase 比在代码中循环或使用 linq 更好。因为它节省了代码执行时间。
  • @Oscar。 . .只要说我强烈不同意你就够了。 “数据库应用程序”通常由应用程序接口和数据存储组成,适合每个组件的逻辑应该放在最适合的地方。
  • @Oscar 以这个案例为例,最终目标是得到total而不是细节,那么为什么要把所有的结果都拿到应用程序中然后进行计算呢?而不是在查询中执行相同的操作?
【解决方案2】:

您不应该像这样对总重量值求和: 总重量 += 数量 * 重量;

因为现在您的 totalWeight 将仅包含最后一个项目的总重量值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多