我正在使用C#,ASP.NET,SQL Server 2008 R2。我的代碼非常簡單,但我仍然遇到同樣的錯誤。問題與SELECT TOP 1
我有一個表Bids
,其列OfferAmount
和Status
。
Status
可以是「活動」或「紅色」。我想計算表中具有Status = 'Active'
的行的平均值OfferAmount
並將其與預設值進行比較。如果計算出的平均值OfferAmount
低於預設值,則將該行的Status
設置爲當前的Status = 'Active'
,並將最低的OfferAmount
設置爲「紅色」。然後我重新運行這個過程。我使用一個do/while循環,條件是calculated average > preset value.
除了一個條件,一切都可以正常工作。如果我有兩個OfferAmounts
是相等的,我需要設置它們的兩個Status = 'Red'
(所以它們不再是我對Status ='Active'計算的一部分)。
在這種情況下,我的循環將一個OfferAmount
設置爲Status = 'Red'
,但它跳過另一個OfferAmount
。通過跳過,我的意思是它表現得好像它不存在一樣,然後移動到下一個最高點OfferAmount
。所以我留下了一個狀態='有效'的行。它繼續前進,並將其餘的行'Red'標記爲高於和低於該值,但從不回到該行。
這是我使用的命令:
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命令,所有的工作除了在此一例。我開始認爲這是一個配置問題。
這也是我的想法+1對查詢的改動也很小, – gbn