私はC#、ASP.NET、SQL Server 2008 R2を使用しています。私のコードはかなりシンプルですが、私は同じエラーに陥っています。SELECT TOP 1に関する問題
OfferAmount
とStatus
の列を持つテーブルBids
があります。
Status
は、「アクティブ」または「赤」のいずれかです。私はStatus = 'Active'
を持っているテーブルの行の平均OfferAmount
を計算し、それをプリセット値と比較したいと思います。計算された平均OfferAmount
が既定値よりも低い場合、私は現在のStatus = 'Active'
の行をOfferAmount
とし、その行のStatus
を「赤」に設定します。私はその後、プロセスを再実行します。 do/whileループを使用して条件を指定します。calculated average > preset value.
1つの条件を除いてすべてが完全に機能します。私が同等である2つの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)
私はすべてがこの1場合を除いて働いていた別のSQLコマンドの束を試してみました。私は構成上の問題だと思っています。あなたが最小入札額にあなたの比較を行うことができ
これは私の考えでも+1です。クエリにも最小限の変更が加えられましたが、 – gbn