Я унаследовал хранимую процедуру, которая использует переменную таблицы для хранения данных, а затем обновляет каждую строку с полным расчетным счетом. Порядок записей в переменной таблицы очень важен, так как мы хотим, чтобы объем заказывался с наивысшим наименьшим (т. Е. Общее количество работы будет увеличиваться по мере того, как вы идете вниз по таблице).Использование текущего подсчитанного столбца в переменной таблицы SQL Server
Моя проблема, во время стадии, где обновляется переменная таблица, общая сумма, кажется, вычисления, но не таким образом, что данные в таблице переменных была ранее отсортированный по (убывания высокий объем)
DECLARE @TableVariable TABLE ([ID], [Volume], [SortValue], [RunningTotal])
--Populate table variable and order by the sort value...
INSERT INTO @TableVariable (ID, Volume, SortValue)
SELECT
[ID], [Volume], ABS([Volume]) as SortValue
FROM
dbo.VolumeTable
ORDER BY
SortValue DESC
--Set TotalVolume variable...
[email protected] = ABS(sum([Volume]))
FROM @TableVariable
--Calculate running total, update rows in table variable...I believe this is where problem occurs?
SET @RunningTotal = 0
UPDATE @TableVariable
SET @RunningTotal = RunningTotal = @RunningTotal + [Volume]
FROM @TableVariable
--Output...
SELECT
ID, Volume, SortValue, RunningTotal
FROM
@TableVariable
ORDER BY
SortValue DESC
В результате запись, которая имела самый высокий том, я бы ожидал, что общая сумма будет вычисляться сначала (при этом общая сумма = [том]), как-то заканчивается намного дальше в списке. Нарастающим итогом, кажется, вычислить случайно
Вот что я хотел бы ожидать, чтобы получить:
Но вот что код на самом деле генерирует:
Не уверен, что если есть способ заставить оператор UPDATE быть введенным в переменную таблицы таким образом, что он упорядочен по объему desc? Из того, что Ive читал до сих пор, это может быть проблема с поведением сортировки переменной таблицы, но не уверен, как исправить? Может ли кто-нибудь помочь?
Нет, не делайте этого. Вы используете то, что обычно называют причудливым методом обновления. Учитывая, что это переменная таблицы, я уже знаю, что вы нарушаете некоторые известные проблемы в этой технике. Для этой работы требуется кластеризованный индекс. Ознакомьтесь с этой статьей, в которой обсуждается этот метод. http://www.sqlservercentral.com/articles/T-SQL/68467/ Обязательно прочитайте комментарии. Этот подход недокументирован и является весьма противоречивым. Функции Windows подойдут вам лучше здесь. –
[Лучшие подходы к запуску итогов - обновлено для SQL Server 2012] (https://sqlperformance.com/2012/07/t-sql-queries/running-totals) – GarethD
Ваши изображения отображают тома отсортированы по убыванию, а покадровая сортировка по возрастанию , Я не вижу проблемы ... – Zack