SQL CASE与否?

时间:2012-11-22 00:32:31

标签: sql case

我正在尝试制作一个包含客户信息的数据库后面/前面,信息范围从约会和笔记等,因为我们是一个咨询服务,如果你错过(dna)3个会议,你在技术上从我们的服务中解雇了我想要是自动化这个过程 - 帮助我是一个自学新手,我试图用“SELECT CASE”做这个,但不知道在这里

id | nhi    | service | type | length | contactdate | notes
1  |PEB8132 | aod     | t32  | 20     | 2012-11-20  | notes go here

这是我的桌子,当他们没有参加长度变成dna时,我想在3次尝试失败后用它来标记。

2 个答案:

答案 0 :(得分:1)

你想把所有拥有[length] ='dna'的人聚集在一起,显示他们拥有多少dna的数量。

您还希望将其限制为“dna”> 3,但您不能在WHERE子句中使用聚合,因此我们使用HAVING

您可以在SELECT语句中添加更多列,但您还需要将其添加到GROUP BY

SELECT nhi, count([length]) AS dna
FROM yourTable
WHERE [length] = 'dna'
GROUP BY nhi
HAVING count([length]) > 3

如果你想要返回所有记录,而不仅仅是[length] ='dna',那么你可以使用CASE。

SELECT nhi, SUM(CASE WHEN [length]='dna' THEN 1 ELSE 0 END) AS dna
FROM yourTable
GROUP BY nhi

这假定nhi是用户的ID,这是您识别此人的方式。

额外阅读:GROUP BYHAVING

答案 1 :(得分:0)

这个适用于Oracle。

select nhi ,sum(case when length='dna' then 1 else 0 end) dna_count 
from table 
group by nhi  
having sum(case when length='dna' then 1 else 0 end)>3;