2012-06-20 32 views
5

Dưới đây là các bảng:Chọn đếm từ một bảng cho mỗi dòng trong kết quả hàng

CREATE TABLE [dbo].[Classes](
    [ClassId] [int] NOT NULL, 
    [ClassName] [nvarchar](50) NOT NULL, 
CONSTRAINT [PK_Classes] PRIMARY KEY CLUSTERED 
(
    [ClassId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE TABLE [dbo].[Students](
    [StudentId] [int] NOT NULL, 
    [ClassId] [int] NOT NULL, 
CONSTRAINT [PK_Students] PRIMARY KEY CLUSTERED 
(
    [StudentId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 
GO 
ALTER TABLE [dbo].[Students] WITH CHECK ADD CONSTRAINT [FK_Students_Classes] FOREIGN KEY([ClassId]) 
REFERENCES [dbo].[Classes] ([ClassId]) 
GO 
ALTER TABLE [dbo].[Students] CHECK CONSTRAINT [FK_Students_Classes] 
GO 

Tôi muốn để có được danh sách của lớp, và mỗi lớp - số lượng sinh viên mà thuộc về mỗi lớp. Tôi có thể làm như thế nào?

Trả lời

17

Bạn cần phải làm điều này -

SELECT C.ClassId, C.ClassName, count(S.StudentId) AS studentCount 
FROM CLASSES C LEFT JOIN STUDENTS S ON (C.ClassId=S.ClassId) 
GROUP BY C.ClassId, C.ClassName 
+0

Giống như @Kshitij đã chỉ ra sự khác biệt giữa các truy vấn của mình bất kỳ của tôi sẽ là truy vấn của tôi sẽ bỏ qua bất kỳ lớp học mà không có sinh viên - vì thế upvote :) – Kane

2

Bạn có nghĩa là một cái gì đó như thế này?

SELECT C.[ClassName], COUNT(*) AS 'Number of Students' 
FROM [dbo].[Classes] AS C 
    INNER JOIN [dbo].[Students] AS S ON S.[ClassId] = C.[ClassId] 
GROUP BY C.[ClassName] 
0
SELECT class.ClassId, count(student .StudentId) AS studentCount 
FROM dbo.CLASSES class LEFT JOIN dbo.STUDENTS student ON (class.ClassId=student.ClassId) 
GROUP BY class.ClassId 
+0

[Stack Overflow] (//stackoverflow.com) chấp nhận ** câu trả lời chỉ mã ** như thế này, nhưng nó không phải là * rất * trợ giúp cho người khác. Vui lòng [sửa] câu trả lời của bạn và giải thích * Mã của bạn hoạt động như thế nào *. Đôi khi, cũng * Tại sao mã OP không hoạt động *. –

0
select c.ClassId,C.ClassName,COUNT(*) [Number of students] 
from Classes C,Students S 
where c.ClassId=S.ClassId 
group by C.ClassId,C.ClassName 
Các vấn đề liên quan