繁体   English   中英

如何从SQL Server中的INNER JOIN查询获取DISTINCT行

[英]How to get DISTINCT row from INNER JOIN Query in SQL Server

我一直在从事学校管理项目。 一位老师有多个科目,我只需要显示查询中的一个科目,但是我会得到老师拥有的所有科目。 现在,我只需要一条记录用于老师2(TeacherId = 2,具有上述屏幕快照查询中的两个主题(英语和数学),而英语或数学中的任何一个都可以。

文字查询:

SELECT        dbo.Teacher.TeacherId, dbo.Teacher.TeacherName, dbo.Gender.Gender, dbo.Teacher.DOB, ISNULL(dbo.Subject.Subject, 'No Subject') AS Subject, 
                         dbo.Teacher.Contact, dbo.Teacher.Address, dbo.Teacher.Email, dbo.Teacher.Photo
FROM            dbo.Subject INNER JOIN
                         dbo.TeacherSubject ON dbo.Subject.SubjectId = dbo.TeacherSubject.SubjectId RIGHT OUTER JOIN
                         dbo.Teacher INNER JOIN
                         dbo.Gender ON dbo.Teacher.Gender = dbo.Gender.GenderId ON dbo.TeacherSubject.TeacherId = dbo.Teacher.TeacherId

在此先感谢您的帮助。

将您的查询添加Row_Number()语句作为另一列,然后将整个查询放在CTE中

WITH CTE AS
(
Select *,Row_Number()OVER(PARTITION BY SUBJECT ORDER BY 1 DESC)RN from Table
)
Select * from CTE WHERE RN = 1  

要么

尝试这个

Select * from Dbo.Subject
INNER JOIN (Select DISTINCT ISNULL(MAX(Subjectname,'NoSubject') As Subject FROM TeacherSubject)As Subjectname
ON Subjectname.SubjectID = Subject.SubjectID

最简单的方法是首先让每个老师只参加一个科目。 因此,加入一个聚合:

select
  t.teacherid, 
  t.teachername, 
  g.gender, 
  t.dob, 
  coalesce(s.subject, 'no subject') as subject, 
  t.contact, 
  t.address, 
  t.email, 
  t.photo
from teacher t
join gender g on g.genderid = t.gender
left join 
(
   select teacherid, max(subjectid) as max_subjectid
   from teachersubject
   group by teacherid
) ts on ts.teacherid = t.teacherid
left join subject s on s.subjectid = ts.max_subjectid;

利用独特的条款。 这应该为您工作。 在您的情况下,Select和dbo.Teacher.TeacherId之间是不同的(在第一行中)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM