postgresql
  • case
  • 2012-11-09 69 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'?

    相關問題