2015-10-15 58 views
0

我有这样的代码在PostgreSQL:PostgreSQL的:添加到外壳

CASE 
    WHEN a > b THEN 'a is bigger than b' 
    WHEN a > c THEN 'a is bigger than c' 
    ELSE ' ' 
END AS "all bigs", 

现在的事情是我需要添加两当的结合,使第二何时 不能抹去第一个。

我的专栏看起来应该(a is bigger than b\na is bigger than c):

all bigs 
--------- 
a is bigger than a 
a is bigger than c 

不喜欢:

all bigs 
--------- 
a is bigger than c 

如何做到这一点?

@zedfoxus,尝试这一点,但没有运气( “错误:语法错误或接近 ”联盟“”):

CASE 
    WHEN a > b THEN 'a is bigger than b'::text 
UNION ALL 
    WHEN a > c THEN 'a is bigger than c'::text 
END AS "all bigs" 
+1

的'CASE'语句只解决单行的值。它不能奇迹般地向查询添加更多行。您需要显示*整个*查询并告诉我们您要做什么,最好是使用您要查询的数据集的示例。 –

+0

@MikeChristensen,你为什么需要整个查询?我认为这应该够了。看起来非常简单。 –

+0

这是您要退回的唯一专栏,还是有其他人?如果'a'是最小的值,那么期望的结果是什么?一行空白?两个空行? –

回答

0

试试这个:

create table test (a int, b int, c int); 
insert into test values (3, 2, 1); 

select case when a > b then 'a is bigger than b' else '' end as "all bigs" from test 
union all 
select case when a > c then 'a is bigger than c' else '' end as "all bigs" from test 
+0

可以从'测试'被删除?这只是数据库中的一个视图。 –

+0

可能。你可以把你的'create view'语句放在你的问题中,这样我可以提供更好的指导吗? – zedfoxus

+0

即使'a'小于'b'和'c',这也会导致2 *空*行,如果'a'小于另一个值,则为1空行。 –