Хобрук: Ваш путь к мастерству в программировании

Попытка обновить временную таблицу в sql путем накопления переменной

У меня есть временная таблица, содержащая 4 переменные, для которых мне нужно выполнить расчет, а затем накапливать это поле от записи к записи, аналогично кумулятивной сумме. Я установил РАНГ в #TEMP_TABLE_1. Вот мой код:

UPDATE T1
SET T1.TOTAL_NET_BAL = ISNULL((SELECT T2.TOTAL_NET_BAL 
                               FROM #TEMP_TABLE_1 AS T2
                               WHERE T1.RANK - 1 = T2.RANK),0) + (T1.MAX_STD_CAPACITY + T1.MAX_QT_CAPACITY) - (T1.STANDARD_PANELS + T1.QUICKTURN_PANELS)
FROM #TEMP_TABLE_1 AS T1

Все, что он делает, это обновляет текущую строку в таблице для TOTAL_NET_BAL. По какой-то причине он не захватывает сумму, когда мы находимся в следующем ряду.

Изображение примера данных здесь


  • Пожалуйста, предоставьте образцы данных и желаемые результаты. Также отметьте базу данных, которую вы используете. 31.07.2020
  • Пожалуйста, включите это в свой вопрос как отформатированный код, а не в комментарий. 31.07.2020
  • Вот 2 строчки. Обратите внимание, что TOTAL_NET_BAL — это то, что я пытаюсь собрать. Вот две записи. RANK = 582 MSP = 340 MQC = 100 SP = 209 QP = 0 TOTNETBAL = 231 RANK = 583 MSP = 340 MQC = 100 SP = 361 QP = 0 TOTNETBAL =310 31.07.2020
  • Спасибо Scratte за идею. Новое на этой доске. 31.07.2020

Ответы:


1

Вы ищете совокупную сумму. Вы можете увидеть, как сделать кумулятивную сумму по этой ссылке и адаптировать ее к соответствовать вашим потребностям.

31.07.2020
  • Спасибо, Джейсон. Я на самом деле думаю, что знаю, как сделать кумулятивную сумму. Исходя из логики моего кода, я не понимаю, почему это не работает. 31.07.2020
  • При использовании команд набора (SQL) вы не можете гарантировать, в каком порядке будут обрабатываться отдельные строки в наборе. (Для этого и нужны курсоры.) Чтобы сохранить атомарность, многострочное обновление не будет ссылаться на данные из любой другой строки, затронутой тем же обновлением. Ваши изменения находятся в транзакции, но ваша временная таблица извлекается из фактической таблицы. Курсоры обходят это, работая с одной строкой за раз, а CTE — это причудливый (и более эффективный?) способ сделать то же самое. 19.07.2021

  • 2

    Итак, в итоге я изменил свой код на другой оператор select в другую таблицу TEMP, используя функцию SUM. До сих пор не знаю, почему мой первоначальный оператор SQL вверху не сработал, но я могу двигаться дальше. Спасибо.

    31.07.2020

    3

    В SQL Server можно использовать обновляемое CTE. Если я правильно понимаю, вам нужна текущая сумма:

    with toupdate as (TOTAL_NET_BAL) over 
          select t.*,
                 sum((T1.MAX_STD_CAPACITY + T1.MAX_QT_CAPACITY) - (T1.STANDARD_PANELS + T1.QUICKTURN_PANELS)) over (order by rank) as running_total
          from #temp_table t
    update toupdate
        set total_net_bal = running_total;
    
    31.07.2020
    Новые материалы

    Разработчики — Избегайте сложностей глупо
    Сложность управляется, а не побеждается «Простота — великая добродетель, но для ее достижения требуется тяжелая работа и образование, чтобы оценить ее. И что еще хуже: сложность продается..

    Как сделать HTML динамическим с помощью JavaScript
    Код JavaScript выполняется внутри страниц сайта. Таким образом, страница вашего сайта содержит метки HTML, а также пояснения (скрипты), составленные с использованием диалекта сценариев, такого как..

    Деревья классификации и регрессии
    Это мой второй пост об алгоритмах машинного обучения. Мой первый пост посвящен искусственным нейронным сетям, вы можете найти его ниже. Нейронные сети — базовое..

    HMTL - Многозадачное обучение для решения задач НЛП
    Достижение результатов SOTA путем передачи знаний между задачами Область обработки естественного языка включает в себя десятки задач, среди которых машинный перевод, распознавание именованных..

    Решения DBA Metrix
    DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

    Начало работы с Блум
    Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..