簡體   English   中英

根據SQL Server中的條件檢查列值的計數是否等於一

[英]Check the count of column value is equal to one based on condition in sql server

我有兩張桌子

學生

StudentId    |  StudentName
----------   |  --------------
1            |  John
2            |  Susan
3            |  Andy
4            |  Joe

StudentId    |    DepartmentId
----------   |    ------------
1            |    123
1            |    234
2            |    123
2            |    456
3            |    123
4            |    456

每個學生可以在多個系中,但是我必須找到那些只在一個系中的學生,例如學生3和4

有什么幫助嗎?

使用GROUP BYHAVING

SELECT s.StudentId,s.StudentName
FROM Department d
JOIN Student s ON s.StudentId=d.StudentId
GROUP BY s.StudentId,s.StudentName
HAVING COUNT(d.DepartmentId)=1

如果您還想向學生顯示不在部門表中的內容

SELECT s.StudentId,s.StudentName
FROM Department d
RIGHT JOIN Student s ON s.StudentId=d.StudentId
GROUP BY s.StudentId,s.StudentName
HAVING COUNT(d.DepartmentId)<=1

LEFT JOIN變體

SELECT s.StudentId,s.StudentName
FROM Student s
LEFT JOIN Department d ON s.StudentId=d.StudentId
GROUP BY s.StudentId,s.StudentName
HAVING COUNT(d.DepartmentId)<=1

只需加入它們並通過having .. count()函數的Group by子句將它們聚合

SELECT s.StudentId, s.StudentName
FROM student s
     JOIN Department d ON d.StudentId = s.StudentId
GROUP BY s.StudentId, s.StudentName
HAVING COUNT(d.DepartmentId) = 1;

結果:

studentid   studentname 
3           Andy        
4           Joe         

您可以將IN與帶有StudentId department表組一起使用,並且在以下子查詢中具有count(Student_Id) = 1

SELECT *
FROM student s
WHERE s.StudentId IN (
        SELECT d.StudentId
        FROM Department d
        GROUP BY d.StudentId
        HAVING count(d.DepartmentId) = 1
        );

結果:

+-----------+-------------+
| studentid | studentname |
+-----------+-------------+
|         3 | Andy        |
|         4 | Joe         |
+-----------+-------------+

演示

嘗試這個,

SELECT st.StudentId, St.StudentName
FROM student st
     JOIN Department dep ON dep.StudentId = st.StudentId
GROUP BY st.StudentId
HAVING COUNT(dep.DepartmentId) = 1;

另一種方法是通過使用cte表消除一開始具有多個系的學生,然后使用帶有IN關鍵字的表,例如:

with cte as (
   select StudentId
   from Department
   group by StudentId
   having count(StudentId)=1  
)
select *
from Students
where StudentId in (select StudentId from cte)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM