簡體   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