1

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','State 2','State 3'
        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'
        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 が必要な文字列を返さないことです。

4

4 に答える 4

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 
于 2012-11-09T06:55:59.430 に答える
2

'State' = 'State' はトートロジーです。"State" = 'State'、つまり列「State」の値が文字列「State」に等しいということですか?

于 2013-11-05T11:03:34.577 に答える
1

を使用しようとしているので、 setまたは array のいずれかを受け入れる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ステートメントにプッシュします。

于 2012-11-09T06:56:44.023 に答える
0

1つのケースに複数の値を設定することはできません。

それが問題です

WHEN 'State' = 'State' THEN 'State 1','State 2','State 3'
于 2012-11-09T06:32:33.993 に答える