2014-10-04 76 views
0

工作在一個視圖,從兩個表中拉,但是在一個表中,我需要選擇一個領域或另一個取決於第三..這是如果別人有我殘缺。如果然後其他人

Create view as 
     select 
      pens.PartNo, 
      pens.Title, 
      ranges.weight 
      if(pens.SpeacialOffer = 1 then pens.offer as Price else pens.Price) 
     from 
      pens, ranges 
     where 
      pens.penrange = ranges.id; 

如果特別優惠活動失敗,則該視圖需要提供報價,否則需要拉動報價。

回答

3

你需要的是一個CASE operator

CASE 
    WHEN condition 
    THEN value_a 
    ELSE value_b 
END 

所以你的情況:

CASE 
    WHEN pens.SpeacialOffer = 1 
    THEN pens.offer 
    ELSE pens.price 
END 

這將替換您的SELECT狀態中的整個列定義換貨,所以整個角度的:

Create View as 
    Select 
     pens.PartNo, 
     pens.Title, 
     ranges.weight, 
     Case 
      When pens.SpeacialOffer = 1 
      Then pens.offer 
      Else pens.price 
     End as Price 
    From 
     pens, ranges 
    Where 
     pens.penrange = ranges.id; 
0

的使用情況,也轉換查詢,以顯式連接的隱含而不是加入

select pens.PartNo, 
     pens.Title, 
     ranges.weight,  
     (Case when 
     pens.SpeacialOffer = 1 then 
     pens.offer else pens.Price 
     end) as Price 
     FROM pens, 
     JOIn ranges 
     ON pens.penrange = ranges.id; 
0

這裏有一種方法:

Create view as select 
    pens.PartNo, 
    pens.Title, 
    ranges.weight, 
    (pens.SpeacialOffer * pens.offer + (1 - pens.SpeacialOffer) * pens.price) as Price 
from 
    pens, 
    ranges 
where 
    pens.penrange = ranges.id;