2016-05-04 11 views
1

まず、タイトルが大変申し訳ありませんが、私の質問には良いタイトルが見つかりませんでした。とにかく、私はそれが結果に一度だけ現れなければならない、メールが複数回表示された場合は、この複数の値から1つの値を選択して表示

email | lang 
---------------- 
[email protected] | 3 
[email protected] | 2 
[email protected] | 1 
  • を返したいと思い、この

    email | lang 
    ---------------- 
    [email protected] | 1 
    [email protected] | 2 
    [email protected] | 2 
    [email protected] | 2 
    [email protected] | 1 
    

    のように見えるテーブルを持っている

  • 電子メールが複数回表示され、1つの言語がある場合は、対応するlangを表示してください
  • 電子メールが複数回表示され、複数の言語がある場合は、3を表示します。
  • 電子メールが一度表示された場合は、それに

を表示これは私が試したものですが、それはlangはTHEN

SELECT email, 
CASE  COUNT(lang) WHEN 1 THEN lang ELSE '3' END 
FROM  table 
GROUP BY email 

どれにそのように呼び出すことはできません考えると動作しません。どのように私はこれを達成できるアイデア?ありがとう

+1

THEN max(lang) –

+3

DISTINCT langを数える必要があります。 –

+0

これは素晴らしいことでした。ありがとう、たくさんの人。 'CASE COUNT(DISTINCT lang)1 THEN MAX(lang)ELSE '3' END' –

答えて

0

このコードは間違いなくあなたを助けるでしょう。 #tempPの代わりにテーブル名を使用してください

select 
distinct 
email, 
(CASE WHEN (count(lang)>1) THEN lang ELSE (select SUM(lang) from #tempP where email=T.email) END) lang 
from 
#tempP T 
group by email,lang 
関連する問題