我想做这样的事情:
CASE
WHEN Derp.Herp = 'Nerp' THEN 'Gerp'
ELSE NULL
ENDS AS Herpty
WHERE Herpty IS NOT NULL
我的想法是,我希望在同一个查询中运行,但问题是Postgres通常会告诉我Herpty不存在(可能是因为它是在同一个查询中创建的)也许这是一个约定或解决方案?这里的想法是获取一个Herpty列,排除'Nerp'
中不是Derp.Herp
的内容,我不希望返回NULL。
更新:到目前为止我得到的答案没有帮助,我的实际查询稍微复杂一点,我不能放入WHERE语句WHERE Derp.Herp <> 'Nerp'
,因为在我的实际查询中它实际上是通过2列中的WHEN声明,所以它更像是这样的:
Derp.Herp = 'Nerp' AND Derp.Burp = 'Durp' THEN 'Gerp'
所以,如果我在WHERE子句中添加它会变得模棱两可,WHERE Derp.Herp <> 'Nerp' AND Derp.Burp <> 'Durp'
将完全消除Nerp和Durp,即使它们在2列中不匹配,我正在做这个工作一个非盈利的请帮助。
这是我尝试重写代码以更准确地反映它:http://pastebin.com/PgvAFvfq
答案 0 :(得分:1)
简短回答:不,不完全是。它是一个计算列,在WHERE子句中不可用。但根据你的例子,你可以做一些像
这样的事情WHERE Derp.Hepr <> 'NERP'
然而,你的整个查询似乎没用。您应该向我们展示您的真实查询。
答案 1 :(得分: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';
答案 2 :(得分:0)
你试过了吗?
当Derp.Herp ='Nerp'时的情况那么'Gerp'ELSE NULL结束作为Herpty的情况,当Derp.Herp ='Nerp'那么'Gerp'ELSE NULL ENDS不是NULL
答案 3 :(得分:0)
检查一下。我希望它能奏效。
SELECT CASE WHEN Derp.Herp = 'Nerp' AND Derp.Burp = 'Durp'
THEN 'Gerp'
FROM (SELECT * FROM YOURTABLE
WHERE Derp.Herp <> 'Nerp' AND Derp.Burp <> 'Durp') Derp