Sql 在选择框中显示多个值中的单个值

Sql 在选择框中显示多个值中的单个值,sql,sql-server,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 如果电子邮件出现多次,则在结果中只能出现一次 如果一封电子邮件出现多次且只有一个语言,则显

首先,很抱歉这个标题戈尔,我找不到一个好的标题来回答我的问题。不管怎样,我有一张这样的桌子

 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
  • 如果电子邮件出现多次,则在结果中只能出现一次
  • 如果一封电子邮件出现多次且只有一个语言,则显示相应的语言
  • 如果一封电子邮件出现多次并且有多个语言,则显示3
  • 如果电子邮件出现一次,请显示它
这是我尝试过的,但考虑到lang不能在
THEN

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

有什么办法可以做到这一点吗?谢谢

此代码肯定会对您有所帮助。使用表名代替#tempP


这段代码肯定会对你有所帮助。使用表名代替#tempP


你需要数一数,太好了。谢谢大家<代码>大小写计数(独立语言)当1然后最大值(语言)否则“3”结束时您需要计算独立语言。太好了。谢谢大家<代码>1时的案例计数(不同语言),然后是最大值(语言),否则“3”结束
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