0

いくつかの SQL に関する小さなヘルプが必要です。ケースで値を使用VARCHARして、WHERE 句で使用するロジックを決定していますが、このケース ステートメントの記述に問題があります。

where 
   (CASE WHEN @p_flag = 'ATA' 
            THEN (@p_start_ata IS NULL AND @p_end_ata IS NULL) OR (vso.poa_ata between @p_start_ata and @p_end_ata)
         ELSE (@p_start_atd IS NULL AND @p_end_atd IS NULL) OR (vso.pol_atd between @p_start_atd and @p_end_atd)
)

93 行目 キーワード 'IS' 付近の構文が正しくありません。

おそらくマイナーなエラーですが、イライラします。たぶん、これを書くより良い方法はありますか?ありがとう!

4

2 に答える 2

2

前に言ったように、あなたがやっているように case ステートメントを使用することはできません。したがって、これは提案かもしれません:

WHERE 
    (
        @p_flag = 'ATA'
        AND 
            (
                (@p_start_ata IS NULL AND @p_end_ata)
                OR (vso.poa_ata between @p_start_ata and @p_end_ata)
            )
    )
    OR
    (
        NOT @p_flag = 'ATA'
        AND 
            (
                (@p_start_atd IS NULL AND @p_end_atd IS NULL)
                OR (vso.pol_atd between @p_start_atd and @p_end_atd)
            )
    )
于 2012-05-22T11:06:15.450 に答える
0

そんなの使えませんCASE

制限ではなく、値を取得するために使用します。これをチェックして、正しい使用方法を確認してくださいCASE


あなたの場合、おそらくを使用してロジックを変更し、必要なをIF作成する必要がありますSELECT

于 2012-05-22T11:06:00.957 に答える