質問
いTSQLを選択でき返しはnullになります。を使ってみましたその他の置き換えることを0にできるのではない。のテーブルからの選択には次の列があります:
- storeID-->int
- penaltyPercent-->decimal(9,2)
- penaltyDate-->dateTime
SELECT ISNULL(penaltyPercent, 0.0) AS penaltyPercent
FROM dbo.Penalty
WHERE (penaltyDate = (SELECT MAX(penaltyDate) AS date
FROM dbo.Penalty AS Penalty_1
WHERE (penaltyDate <= @date) AND (storeID = @storeID))) AND
(storeID = @storeID)
時には目の前刑廃止日の場合は0合には、結果が返されます。なぜうことはできません。い仕事は周辺でbuggingました。
ここではサンプルデータの利用
storeID penaltyDate penaltyPercent
182 10/1/2008 12:00:00 AM 0.020000
182 11/1/2008 12:00:00 AM 0.040000
182 12/1/2008 12:00:00 AM 0.070000
解決
「日が最初のペナルティ日前である場合には、」あなたは、言う@date
の値は、このクエリから返された値よりも小さいときに意味ですかときに?
SELECT MIN(penaltyDate)
FROM Penalty
そのため、あなたの内側のクエリは(あなたがANSIのNULL値を使用している場合)、この部分はfalseを返しますと、ヌルを返すために起こっている、
WHERE (penaltyDate = ...
はnullとの比較は常にnullを返しますので。だからではなく、NULL値である行を選択するので、あなたは何の行を選択していないしています。
補遺ます:
これは問題があることを確認するには、
にあなたの外側のクエリの最初の行を変更SELECT ISNULL(MAX(penaltyPercent),0.0) AS penaltyPercent
これは、理由は私が上記した内容で動作します。
他のヒント
@date
あなたは実際には日が最初のペナルティ日前にされていたデータを持っていますか?クエリがレコードを返さない場合、それは何に対して動作するため、あなたのIsNull句は何でもします。
所属していません StackOverflow