SQL,试图找到哪些行有多个条目

时间:2011-10-26 13:34:25

标签: sql count case

我作为数据人在学校系统工作,在我最近的报告中,我需要发送给州,我需要发送一些有关学生参加测试的数据。很容易。

问题产生于这样一个事实:当教师或管理员输入有关有多种特殊需求的学生的数据时,他们有时会将其填写正确,即通过说多种残疾,有时他们为每个特殊需要单独输入。例如,学生可能有学习障碍和情绪残疾,管理员会做两个条目,而不是一个。

我的查询很长,所以我不打扰整件事,需要这样的事情:

select 

  stuff
  ,morestuff
  ,CASE
      When [**a student is in the list multiple times**]
           Then '**Multiple Disabilities**'
      When '01' 
           Then 'Blind'

等等。

在我脑海中看起来很容易,但是当我尝试将其提交给代码时它会崩溃。

1 个答案:

答案 0 :(得分:4)

这应该对任何RDBMS都非常通用。这假设有一个名为“disabilityname”的列,它会保留您的值01,并假设某个studentid列。

如果学生在子查询COUNT(*)中多次出现,则会返回Multiple Disabilities,否则会返回disabilityname列,假设它具有单个值。

SELECT
  stuff,
  morestuff,
  CASE
    WHEN cnt.numdisabilities > 1 THEN 'Multiple Disabilities'
    ELSE disabilityname
  END as disabilityname
FROM
  tbl JOIN (
    SELECT studentid, COUNT(*) AS numdisabilities FROM tbl GROUP BY studentid
  ) cnt ON tbl.studentid = cnt.studentid