在SELECT中显示多个值中的单个值

时间:2016-05-04 19:49:34

标签: sql sql-server

首先,对不起标题血腥,我无法找到问题的好标题。无论如何,我有一个看起来像这样的表

 email | lang
----------------
 d@d.c | 1
 d@d.c | 2
 a@d.c | 2
 a@d.c | 2
 z@d.c | 1

我想回复此

 email | lang
----------------
 d@d.c | 3
 a@d.c | 2
 z@d.c | 1
  • 如果电子邮件多次出现,则必须在结果中仅显示一次
  • 如果电子邮件多次出现且有一个lang,请显示相应的lang
  • 如果电子邮件多次出现且有多个lang,则显示3
  • 如果电子邮件出现一次,请将其显示

这是我尝试过的,但考虑不能在THEN

中调用lang,它无法正常工作
SELECT   email,
CASE     COUNT(lang)  WHEN 1 THEN lang ELSE '3' END
FROM     table
GROUP BY email

我是如何实现这一目标的?感谢

1 个答案:

答案 0 :(得分: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