繁体   English   中英

添加SQL查询返回的值以获得总数?

[英]Adding values returned by SQL query to get the total?

我有一个函数,根据订单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()然后我会将小数转换为字符串,只是将它们转换回小数,一旦“拆分”将它们加在一起。 这看起来非常复杂......有更好的方法吗?

这是你想要的?

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

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

你不应该总计这样的总重量值:totalWeight + = qty * wgt;

will contain total weight value of last item in order only. 因为现在您的将仅包含最后一项的总重量值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM