[英]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.