postgresql
  • case
  • 2012-11-09 41 views 1 likes 
    1

    我想写一个postgres查询,这是与CASE语句。查询如下:Postgres案例查询问题

    SELECT "State" AS x, count("Age Group") AS y from test.smp_state_survey where "State" IN 
    (CASE 
         WHEN 'State' = 'State' THEN 'State 1' 
         WHEN 'State' = 'District' THEN 'State 1' 
        END) 
        group by x ORDER BY x,y 
    

    请告知:

    'State' = 'State'

    然而,当我执行下面的查询,我得到相应的结果

    SELECT "State" AS x, count("Age Group") AS y from test.smp_state_survey where "State" IN 
    (CASE 
         WHEN 'State' = 'State' THEN 'State 1','State 2','State 3' 
         WHEN 'State' = 'District' THEN 'State 1' 
        END) 
        group by x ORDER BY x,y 
    

    以上查询显示语法错误我知道我做错了什么。

    编辑:

    THEN子句后的值是动态的,它可含有1倍或更多的值(从多选择框)。我想查询被执行为

    SELECT "State" AS x, count("Age Group") AS y from test.smp_state_survey where "State" IN 
    ('State 1','State 2','State 3') 
        group by x ORDER BY x,y 
    

    哪个运行得很好,但问题是CASE没有返回我所需的字符串。

    回答

    5

    您的查询应该是这样的,我希望这会为你工作

    SELECT "State" AS x, count("Age Group") AS y from test.smp_state_survey where 
    CASE 
         WHEN 'State' = 'State' THEN "State" IN ('State 1' ,'State 3') 
         WHEN 'State' = 'District' THEN "State" IN ('District 1') 
        END 
        group by x ORDER BY x,y 
    
    +0

    谢谢,这工作:) – Ankit

    0

    你不能有多个值的单个案例。

    那问题

    WHEN 'State' = 'State' THEN 'State 1','State 2','State 3' 
    
    +0

    但是,解决方案是什么? – aditya

    +0

    当state = state应该指定什么值时,你的目标是什么? –

    +0

    @shamis:请阅读我更新的问题。 – Ankit

    1

    既然你试图使用IN,您可以利用的事实上,IN接受集合或一个数组

    SELECT "State" AS x, count("Age Group") AS y 
    FROM test.smp_state_survey 
    WHERE "State" IN (CASE 
        WHEN 'State' = 'State' THEN ARRAY['State 1','State 2','State 3'] 
        WHEN 'State' = 'District' THEN ARRAY['State 1'] 
    END) 
    GROUP BY x 
    ORDER BY x,y 
    

    或使用@ user1327246的重新语句,将IN测试推入CASE语句。

    2

    'State'='State'是一个重言式。 您的意思是“State”='State',即列“State”的值等于字符串'State'?

    相关问题