Я использую C #, ASP.NET, SQL Server 2008 R2. Мой код довольно прост, но я продолжаю сталкиваться с одной и той же ошибкой.
У меня есть таблица Bids
, в которой есть столбцы OfferAmount
и Status
.
Status
имеет значение «Активный» или «Красный». Я хочу вычислить среднее значение OfferAmount
строк в таблице, которые имеют Status = 'Active'
, и сравнить его с заданным значением. Если вычисленное среднее значение OfferAmount
ниже, чем предварительно установленное значение, тогда я устанавливаю Status
строки с током Status = 'Active'
И с самым низким OfferAmount
на «Красный». Затем я снова запускаю процесс. Я использую цикл do / while с условием, что calculated average > preset value.
Все работает отлично, кроме одного условия. Если у меня есть два OfferAmounts
, которые равны, И мне нужно установить оба их Status = 'Red'
(чтобы они больше не были частью моего вычисления для Status = 'Active').
В этом случае мой цикл устанавливает один OfferAmount
на Status = 'Red'
, но затем пропускает другой OfferAmount
. Под пропуском я подразумеваю, что он ведет себя так, как будто его не существует, и переходит к следующему наивысшему значению OfferAmount
. Поэтому у меня осталась строка, у которой есть статус = «Активен». Он продолжает идти и помечает остальные строки как «Красные» выше и ниже значения, но никогда не возвращается к этой строке.
Я использую эту команду:
UPDATE Bids
SET Status = 'Red'
WHERE BidId IN (SELECT TOP 1 BidId
FROM Bids
WHERE Status = 'Active'
AND ItemId = @ItemId
ORDER BY OfferAmount, BidDateAndTime DESC)
Я пробовал кучу разных команд sql, которые все работали, за исключением этого случая. Я начинаю думать, что это проблема конфигурации.