是否可以在同一查询中执行不同的选择?

时间:2015-10-18 09:06:03

标签: sql postgresql

我有一张桌子:

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

这个日子:

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

但我的目标是当Emg Low有不同的数据,我手动提供。 =&GT; name将不重要&#39; sumbuy将为0。 所以我想看到的是:

Emg, id , name,            sumbuy, priority, ...
High  1    xx              33       12 
High  2    dd              45        7
Low   4    not important   0        0
基本上,我要问的是,根据行中的数据,选择的陈述是否有可能执行不同的指令...... 类似的东西:

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语法,但它展示了我想要的东西。

除了编写两个不同的查询之外,我该怎么做?

1 个答案:

答案 0 :(得分: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