2012-03-02 109 views
0

我想要做这样的事情:如何在Postgres中的WHERE语句中添加WHERE语句?

CASE WHEN Derp.Herp = 'Nerp' THEN 'Gerp' ELSE NULL ENDS AS Herpty WHERE Herpty IS NOT NULL

的想法是,我想这是在同一个查询中运行,但问题是,它的Postgres通常会告诉我, Herpty不存在(可能是因为它是在同一个查询中创建的),也许有一个约定或解决方法?这里的想法是获得一个Herpty列,排除'Nerp'中的'Nerp',并且我不希望NULL返回。

更新:到目前为止我的答案没有帮助,我的实际查询稍微复杂一点,我不能放在WHERE语句WHERE Derp.Herp <> 'Nerp'因为在我的实际查询它实际上通过WHEN语句中的2列,所以它更像是这样的: Derp.Herp = 'Nerp' AND Derp.Burp = 'Durp' THEN 'Gerp'所以如果我去补充说,它得到模棱两可的WHERE子句中,WHERE Derp.Herp <> 'Nerp' AND Derp.Burp <> 'Durp'将消除复兴方案和Durp完全即使他们没有在2列相匹配,我做这项工作了非营利请帮忙。

这是我在rewritting我的代码,以更准确地反映它的尝试:http://pastebin.com/PgvAFvfq

+0

你可以写完整的查询你在做什么... – Teja 2012-03-02 18:58:51

+0

只需执行编辑,答案仍然是受欢迎的。 – user519753 2012-03-05 19:16:00

+0

u能写乌尔完整的查询... – Teja 2012-03-05 19:17:59

回答

1

简短的回答:不,不完全是。这是一个计算列,它在WHERE子句中不可用。但根据你的例子,你可以做一些像

WHERE Derp.Hepr <> 'NERP' 

但是,然后,你的整个查询似乎几乎没用。你应该向我们展示你真正的问题。

+0

+1 - 这正是需要的 – Lamak 2012-03-02 19:00:44

+0

是的你说得对,我觉得很傻我没有想到Derp.Herp内的Nerp – user519753 2012-03-02 19:41:06

+0

我只是想提一下,这将是大量的工作,因为ELSE NULL会变成什么,没有我的标准比赛拖入一个NULL – user519753 2012-03-02 19:53:55

0

您只需重新组织查询一点点;

SELECT CASE WHEN Derp.Herp = 'Nerp' THEN 'Gerp' ELSE NULL ENDS AS Herpty 
WHERE Herpty IS NOT NULL 

相同

SELECT 'Gerp' AS Herpty WHERE Derp.Herp = 'Nerp'; 
+0

实际上,这应该是'Derp.Herp <>“Nerp'' – 2012-03-02 19:33:32

+0

@Adrian嗯,你确定吗?如果在第一个版本中使用了'Derp.Herp ='Nerp'',它会返回'Gerp',并且*其他所有*结果将被删除。与第二版相同。 – 2012-03-02 19:46:09

+1

OP要记录哪里的Herpty不为null。 – 2012-03-02 19:50:43

0

你试过:

CASE WHEN Derp.Herp = '复兴方案',然后 'Gerp' ELSE NULL结束。如Herpty WHERE CASE WHEN Derp.Herp = '复兴方案',然后 'Gerp' ELSE NULL完IS NOT NULL

0

检查这一项。我希望它能起作用。

​​
+0

但问题是,如果我这样做,它不会忽略所有在Derp.Herp中具有Nerp的结果以及Derp.Burp中具有Durp的所有结果?在示例中,我非常想知道,如果它是Derp.Herp = Nerp AND Derp.Burp ='Durp',那么它可以对“Gerp”进行更改,但在此示例中,我相信如果Derp.Burp =' Durp“,那么它会将其切断,无论Derp.Herp是否等于'Nerp'或其他。 – user519753 2012-03-05 19:53:26