34,590
社区成员
发帖
与我相关
我的任务
分享
DECLARE @班级表 TABLE (班级编号 VARCHAR(2),班级名称 NVARCHAR(4))
INSERT INTO @班级表
SELECT '01',N'一班' UNION ALL
SELECT '02',N'二班' UNION ALL
SELECT '03',N'三班' UNION ALL
SELECT '04',N'四班'
--> 生成测试数据: @学生表
DECLARE @学生表 TABLE (学号 VARCHAR(3),姓名 VARCHAR(4),所在班级 VARCHAR(2))
INSERT INTO @学生表
SELECT '001','张三','01' UNION ALL
SELECT '002','李四','01' UNION ALL
SELECT '003','王五','02' UNION ALL
SELECT '004','夏利','02' UNION ALL
SELECT '005','小鬼','02' UNION ALL
SELECT '006','高山','03'
select a.班级编号,a.班级名称,COUNT(b.学号)人数 from @班级表 a left join @学生表 b on a.班级编号=b.所在班级
GROUP BY a.班级编号,a.班级名称
/*班级编号 班级名称 人数
---- ---- -----------
01 一班 2
03 三班 1
02 二班 3
04 四班 0
警告: 聚合或其他 SET 操作消除了空值。
(4 行受影响)
*/
---------------------------------
-- Author: liangCK 小梁
---------------------------------
--> 生成测试数据: @班级表
DECLARE @班级表 TABLE (班级编号 VARCHAR(2),班级名称 VARCHAR(4))
INSERT INTO @班级表
SELECT '01','一班' UNION ALL
SELECT '02','二班' UNION ALL
SELECT '03','三班'
--> 生成测试数据: @学生表
DECLARE @学生表 TABLE (学号 VARCHAR(3),姓名 VARCHAR(4),所在班级 VARCHAR(2))
INSERT INTO @学生表
SELECT '001','张三','01' UNION ALL
SELECT '002','李四','01' UNION ALL
SELECT '003','王五','02' UNION ALL
SELECT '004','夏利','02' UNION ALL
SELECT '005','小鬼','02' UNION ALL
SELECT '006','高山','03'
--SQL查询如下:
SELECT
A.班级编号,
A.班级名称,
ISNULL(B.人数,0) AS 人数
FROM @班级表 AS A
LEFT JOIN (
SELECT
所在班级,
COUNT(*) AS 人数
FROM @学生表
GROUP BY 所在班级
) AS B
ON A.班级编号=B.所在班级
/*
班级编号 班级名称 人数
---- ---- -----------
01 一班 2
02 二班 3
03 三班 1
(3 行受影响)
*/
--借小粮数据
DECLARE @班级表 TABLE (班级编号 VARCHAR(2),班级名称 NVARCHAR(4))
INSERT INTO @班级表
SELECT '01',N'一班' UNION ALL
SELECT '02',N'二班' UNION ALL
SELECT '03',N'三班'
--> 生成测试数据: @学生表
DECLARE @学生表 TABLE (学号 VARCHAR(3),姓名 VARCHAR(4),所在班级 VARCHAR(2))
INSERT INTO @学生表
SELECT '001','张三','01' UNION ALL
SELECT '002','李四','01' UNION ALL
SELECT '003','王五','02' UNION ALL
SELECT '004','夏利','02' UNION ALL
SELECT '005','小鬼','02' UNION ALL
SELECT '006','高山','03'
select a.班级编号,a.班级名称,COUNT(*)人数 from @班级表 a inner join @学生表 b on a.班级编号=b.所在班级
GROUP BY a.班级编号,a.班级名称
/*班级编号 班级名称 人数
---- ---- -----------
01 一班 2
02 二班 3
03 三班 1
(3 行受影响)
*/
---------------------------------
-- Author: liangCK 小梁
---------------------------------
--> 生成测试数据: @班级表
DECLARE @班级表 TABLE (班级编号 VARCHAR(2),班级名称 VARCHAR(4))
INSERT INTO @班级表
SELECT '01','一班' UNION ALL
SELECT '02','二班' UNION ALL
SELECT '03','三班'
--> 生成测试数据: @学生表
DECLARE @学生表 TABLE (学号 VARCHAR(3),姓名 VARCHAR(4),所在班级 VARCHAR(2))
INSERT INTO @学生表
SELECT '001','张三','01' UNION ALL
SELECT '002','李四','01' UNION ALL
SELECT '003','王五','02' UNION ALL
SELECT '004','夏利','02' UNION ALL
SELECT '005','小鬼','02' UNION ALL
SELECT '006','高山','03'
--SQL查询如下:
SELECT
A.班级编号,
A.班级名称,
B.人数
FROM @班级表 AS A
JOIN (
SELECT
所在班级,
COUNT(*) AS 人数
FROM @学生表
GROUP BY 所在班级
) AS B
ON A.班级编号=B.所在班级
/*
班级编号 班级名称 人数
---- ---- -----------
01 一班 2
02 二班 3
03 三班 1
(3 行受影响)
*/
SELECT
A.班级编号,
A.班级名称,
B.人数
FROM 班级表 AS A
JOIN (
SELECT
所在班级,
COUNT(*) AS 人数
FROM 学生表
GROUP BY 所在班级
) AS B
ON A.班级编号=B.所在班级