在查询中区分具有通用名称的值

时间:2013-12-20 08:27:36

标签: asp.net sql

这是一个通用的问题。我有一个查询来从表中获取学生的姓名和他们的卷号。在某些情况下,两个或更多学生的名字相同。仅在这种情况下,我想显示他们的名字以及他们的滚动号码。在其他情况下,我想单独显示他们的名字。如何为此编写查询?这可能在SQL中,或者我只想在代码后面执行检查操作吗?

Sql Query:

Select Name as Student_Name,RollNo from Students

3 个答案:

答案 0 :(得分:4)

要在SQL中执行此操作,您需要执行以下操作:

select
  case when m.Name is null then s.Name
  else s.Name + ' ' + s.RollNo
  end as Name
from Students s
left join
(
  select Name from Students
  group by Name
  having count(*) > 1
 ) m on s.name = m.name

但是我会尝试一个有争议的答案,因为我觉得这是UI逻辑,应该保存在UI中(你用ASP.NET标记了这个问题所以我只能假设你有一个UI)。我假设是C#。

在您的学生课程中,我会执行以下操作:

public override ToString()
{
  return this.Student_Name;
}

public string GetDisplayName(IEnumerable<Student> otherStudentsInList)
{
  if(otherStudentsInList.Contains(this.ToString())
  {
    return string.Concat(this.ToString(), " ", this.RollNo);
  }
  else
  {
    return this.ToString();
  }
}

答案 1 :(得分:3)

使用CASE编写查询,并且在条件情况下为GROUP BY名称,如果是HAVING COUNT&gt; 1,选择名称和卷号。在ELSE语句中只查询名称。

答案 2 :(得分:1)

尝试此查询

Select Student_Name,

Case When Student_Name=(Select Student_Name from Students group by Student_Name having 
Count(*) > 1) THEN  RollNo

ELSE NULL

END RollNo

from Students  

快乐编码