2017-10-23 19 views
0

は君たちが私を助けることを願って1つのSQLで、 表2つの特定の値を作成します。私は私のクエリに問題を抱えている

ID | Value 
1 | F 
2 | V 
2 | F 
3 | V 
4 | F 
4 | V 

を、私はIDがFの両方を持っているとき、私のクエリがPを返すようにしたいですそしてV、

ID | Value 
1 | F 
2 | P 
3 | V 
4 | P 

私はCASE

WHEN VALUE ='F' AND VALUE ='V' THEN 'P' 
        ELSE VALUE END 

にしようとしたが、それは働いていませんでした。

+0

使用しているデータベースでご質問ください。 –

+0

(5、F)、(5、V)、(5、F)を追加すると、どのような結果になるでしょうか?私はあなたが(5、P)行が欲しいと理解していますが、1行(5、F)を続けたいと思いますか? – jarlh

+0

FとVの両方を持っていれば(5、P)行しか保持しないようにPを返そうとしている場合、(5、F)と(5、V) – FredCC

答えて

1

あなたはこれを試みることができるグループ化句を必要として、ケースに

SELECT id, 
     CASE WHEN MIN(ds._value) = 'F' AND MAX(ds._value) = 'V' THEN 'P' ELSE MIN(ds._value) END AS _value 
FROM (
      --making the data set 
      SELECT '1' AS id,'F' AS _value UNION SELECT '2','V' UNION 
      SELECT '2','F' UNION SELECT '3','V' UNION SELECT '4','F' UNION SELECT '4','V' 

     ) ds 

     GROUP BY id 

See the image for sample

1

使用group byと、いくつかの条件付きロジック:

select id, 
     (case when min(value) = 'F' and max(value) = 'V' then 'P' 
      else min(value) 
     end) as value 
from t 
group by id; 

これが唯一の値はあなたの例のように、'F''V'であることを前提としています。

-1

をシナリオを処理しますか?

select Distinct f.id, 
CASE WHEN ft.value IS NULL THEN f.value ELSE 'P' END 
from TableName f 
left join TableName ft on f.id = ft.id AND f.value <> ft.value 
Order by f.Id 
関連する問題