0

2 つの個別のクエリを実行し、データを 2 つの一時テーブルに格納するストアド プロシージャがあります。その下に IF ステートメントがあり、結果に応じて 2 つのテーブルのいずれかが表示されます。

DECLARE @DATASET1 AS FLOAT
DECLARE @DATASET2 AS FLOAT

SET @DATASET1 = (SELECT SUM(PREM) FROM #Prem1)
SET @DATASET2 = (SELECT SUM(PREM) FROM #Prem2)

IF (@DATASET1 = 0)
BEGIN

    SELECT  DATE,
            SUM(PREM) AS PREM
    FROM #DATASET2
    GROUP BY YEAR, MONTH, DATE
    ORDER BY YEAR, MONTH

END

IF (@DATASET2 = 0)
BEGIN

    SELECT  DATE,
            SUM(PREM) AS PREM
    FROM #DATASET1 
    GROUP BY YEAR, MONTH, DATE
    ORDER BY YEAR, MONTH

END 

これは、0 を生成せず、データをまったく生成しないデータセット 1 の出力に到達するまで、うまく機能していました。

したがって、クエリのこの部分を次のように更新できるかどうか疑問に思っていました。

IF (@DATASET1 = 0 or '')

私はそのようなことを試みましたが、うまくいかないようです。それゆえ、私の質問です。

4

2 に答える 2

4

テーブルにレコードがない場合、または列に値のみが含まれている場合、スカラー集計クエリ ( SELECT SUM(PREM) FROM #Prem1) は値を返します。NULLPREMNULL

次のように でNULL処理できます。IS NULL

IF (@DATASET1 IS NULL OR @DATASET1 = 0)

次のものも使用できますCOALESCE()

IF (COALESCE(@DATASET1, 0) = 0)
于 2020-01-17T09:21:17.880 に答える