2013-05-30 43 views
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。我要的是,如果查詢返回NULL值比它應該返回1944.0000 爲此我曾嘗試下面的代碼,但沒有得到任何成功嵌套mysql情況下

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 

在此先感謝

+1

你能發佈樣本數據和預期結果嗎? –

+0

請檢查這個[鏈接] sqlfiddle.com/#!2/c49df0/1 –

回答

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[[:>:]]' 
+0

非常感謝,但它不是在mysql函數中工作 [link] http://sqlfiddle.com/#!2/c49df0/1 –

0

你只需要測試該country_percentage是不是在你的表達空:

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

+0

謝謝,但條件不滿時填充它返回空白數組,但我不想這樣。 –

+0

@NayDev。 。 。您需要發佈樣本數據和預期結果。舉個例子,我不明白你在問什麼。這個查詢和你的原始數據都不會返回一個空白或其他數組。 –

+0

請檢查它[鏈接] sqlfiddle.com/#!2/c49df0/1。這裏我也添加了mysql表結構和數據。還有我創建的mysql功能。 –