Добавление значений, возвращаемых SQL-запросом, чтобы получить итог?

1

У меня есть функция, которая получает количество и вес каждого элемента для пользовательского заказа из таблицы 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) каждый элемент имеет количество и вес. Тем не менее, вес, показанный в таблице, НЕ является результатом количества веса * (то есть, пункт ABC имеет количество 6 для заказа № 12345, и каждый элемент ABC весит 1,00 фунтов). Созданная мной функция работает в том, что она умножает количество единиц заказа на вес (т.е. Общий вес для всех 6 предметов ABC составляет 6,00 фунтов)

Тем не менее, теперь мне нужно принять эти общие весовые значения и добавить их вместе, чтобы получить общий вес для всего заказа. Прямо сейчас, я возвращаю все веса в порядке: 6,00, 5,00, 2,80, 146,76, 6,02, 2,25

Но я не уверен, как добавить все это вместе? Я думал о создании Split(), но тогда я бы преобразовал десятичные дроби в строки, чтобы преобразовать их обратно в десятичные числа, чтобы добавить их вместе "split". Это кажется ужасно сложным... есть ли лучший способ?

Теги:
sql-server
add

2 ответа

3
Лучший ответ

Это то, что вы ищите?

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

Если это так, это пример запроса агрегации, который является базовой концепцией SQL. Вы должны выполнять эту работу в базе данных, поскольку база данных оптимизирована для работы с большими объемами данных и извлекает такие результаты из таблиц.

  • 0
    @SaraDeJaneiro Это переместит логику приложения из кода в базу данных, что я считаю плохой практикой в наши дни. Наилучший подход IMHO - это выполнить этот расчет на бизнес-уровне с использованием LINQ.
  • 0
    Это именно то, что я искал. Это было намного проще, чем я думал, что это будет ... Спасибо!
Показать ещё 6 комментариев
0

Если вы не суммируете общие весовые значения следующим образом: totalWeight + = qty * wgt;

Потому что теперь ваш totalWeight будет содержать общее значение веса последнего элемента только в порядке.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню