0
 SELECT    ( CASE 
                        WHEN 1944.0000 >= country_from_price 
                            AND 1944.0000 <= country_to_price
                        THEN ((1944.0000 + ((1944.0000 * country_percentage)/100)))
                            ELSE 1944.0000
                        END 
                        )   
                       FROM `country_markup` 
                       WHERE estatus = '1' 
                       AND country_id REGEXP '[[:<:]]138[[:>:]]'

上記のクエリの戻り値はパーセントで増加しますが、条件が完全に満たされていない場合は NULL を返します。私が欲しいのは、クエリが1944.0000を返すよりもNULL値を返す場合です。このために、コードの下で試しましたが、成功しませんでした

SELECT  IF( (SELECT (CASE 
                        WHEN 1944.0000 >= country_from_price 
                            AND 1944.0000 <= country_to_price
                        THEN ((1944.0000 + ((1944.0000 * country_percentage)/100)))
                            ELSE 1944.0000
                        END 
                        )   as f1
                       FROM `country_markup` 
                       WHERE estatus = '1' 
                       AND country_id REGEXP '[[:<:]]223[[:>:]]') IS NOT NULL, f1  ,1944.0000) as final_price

前もって感謝します

4

2 に答える 2

0

これはうまくいくようCOALESCEです(元のクエリが単一のレコードしか返せないと仮定します):

SELECT COALESCE((
  SELECT    
      CASE WHEN 1944.0000 >= country_from_price AND 1944.0000 <= country_to_price
          THEN ((1944.0000 + ((1944.0000 * country_percentage)/100)))
               ELSE 1944.0000
          END         
  FROM `country_markup` 
  WHERE estatus = '1' 
      AND country_id REGEXP '[[:<:]]138[[:>:]]'), 1944.0000) final_price

サブクエリに追加LIMIT 1して、必要に応じて単一のレコードのみを返すようにすることもできます。


MAXで集計を使用する別の方法を次に示しCOALESCEます。

  SELECT    
      COALESCE(MAX( CASE WHEN 1944.0000 >= country_from_price AND 1944.0000 <= country_to_price
          THEN ((1944.0000 + ((1944.0000 * country_percentage)/100)))
               ELSE 1944.0000
          END ),1944.0000)    final_price   
  FROM `country_markup` 
  WHERE estatus = '1' 
      AND country_id REGEXP '[[:<:]]138[[:>:]]' 
于 2013-05-30T13:57:20.673 に答える
0

country_percentage式で が null でないことをテストするだけです。

SELECT    (CASE WHEN 1944.0000 between country_from_price AND country_to_price and
                     country_percentage is not null
                THEN ((1944.0000 + ((1944.0000 * country_percentage)/100)))
                ELSE 1944.0000
            END)   
FROM `country_markup` 
WHERE estatus = '1' AND country_id REGEXP '[[:<:]]138[[:>:]]';

また、比較ロジックを使用するように変更しましたbetween

于 2013-05-30T14:05:48.610 に答える