2015-10-18 27 views
1

我有一個表:是否有可能在同一個查詢中做不同選擇?

id integer 
name text 
sumbuy numeric 
priority integer 
.... 

表包含:

id , name , sumbuy, priority, ... 
1 xx  33  12 
2 dd  45  7 
4 aa  54  0 

我需要編寫一個查詢基於priority欄位,讓信息。 問題是數據根據優先級而改變。

Select case when priority>0   then 'High'::Text 
      when popartid<=0  then 'Low'::Text 

    end as Emg,* 
from A 

這yeilds:

Emg, id , name , sumbuy, priority, ... 
High 1 xx  33  12 
High 2 dd  45  7 
Low 4 aa  54  0 

但我的目標是當EmgLow有我手動給在指出錯誤的數據。 =>name將是「不重要」 sumbuy將爲0 所以,我希望看到的是:

Emg, id , name,   sumbuy, priority, ... 
High 1 xx    33  12 
High 2 dd    45  7 
Low 4 not important 0  0 

基本上,我所問的是,如果它是poosible的選擇statment基於不同勢指令執行該行的數據... 類似:

Select case when priority>0 
       then 'High'::Text as Emg, id, name, sumbuy, priority              
      when popartid<=0 
       then 'Low'::citext as Emg, id, 'not important' as name, 0 as sumbuy, priority 
from A 

這不是case語法,但它正在示威我想要什麼。

除了編寫兩個不同的查詢之外,我該怎麼做?

+0

做一個UNION ALL代替,或用幾個案例的。 – jarlh

回答

2

您可以通過2種方式做到這一點我想

1.

Select case when priority>0 
    then 'High'::Text 
    else 'Low'::citext end as Emg, 
    id, 
case when priority>0 then name else 'not important' end as name, 
case when priority>0 then sumbuy else 0 end as sumbuy 
.. 
.. 
from A 

2.

select 'High' as Emg,id,name,sumbuy,priority from A where priority>0 
union all 
select 'Low' as Emg,id,'not important' as name,0 as sumbuy,priority from A 
where priority <=0 
相關問題