質問

い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(@pentaltyPercent)に出て選択したい場合があります。

あなたは実際には日が最初のペナルティ日前にされていたデータを持っていますか?クエリがレコードを返さない場合、それは何に対して動作するため、あなたのIsNull句は何でもします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top