这是一个通用的问题。我有一个查询来从表中获取学生的姓名和他们的卷号。在某些情况下,两个或更多学生的名字相同。仅在这种情况下,我想显示他们的名字以及他们的滚动号码。在其他情况下,我想单独显示他们的名字。如何为此编写查询?这可能在SQL中,或者我只想在代码后面执行检查操作吗?
Sql Query:
Select Name as Student_Name,RollNo from Students
答案 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
快乐编码