22,199
社区成员
发帖
与我相关
我的任务
分享
DECLARE @TempCall TABLE(
RecDate BIGINT NOT NULL,
学校 VARCHAR(20),--学校
年级 VARCHAR(20),--年级
班级 VARCHAR(20),--班级
上课人数 INT NULL,
迟到人数 INT NOT NULL,
病假人数 INT NOT NULL)
INSERT INTO @TempCall(RecDate, 学校, 年级, 班级, 上课人数, 迟到人数, 病假人数)
SELECT 20110215, '第一中学', '', '', 190, 4, 0 UNION ALL
SELECT 20110215, '第一中学', '八年级', '', 150, 3, 0 UNION ALL
SELECT 20110215, '第一中学', '八年级', '一班', 25, 1, 1
DECLARE @stat TABLE(
RecDate BIGINT NOT NULL,
统计对象 INT,--1:学校 2:年级 3:班级
统计内容 INT,--1:上课人数, 2:迟到人数, 3:病假人数
Less5 INT,--如统计对象为学校、统计内容为上课人数,即该字段表示上课人数少于5人的学校有多少个
Less20 INT,
Less30 INT,
Less40 INT,
Less50 INT)
/*
其中:如 20110215, '第一中学', '八年级', '一班', 25, 1, 1 该记录 需要在统计学校、年级、班级时分别都需要统计
*/
DECLARE @TempCall TABLE(
RecDate BIGINT NOT NULL,
学校 VARCHAR(20),--学校
年级 VARCHAR(20),--年级
班级 VARCHAR(20),--班级
上课人数 INT NULL,
迟到人数 INT NOT NULL,
病假人数 INT NOT NULL)
INSERT INTO @TempCall(RecDate, 学校, 年级, 班级, 上课人数, 迟到人数, 病假人数)
SELECT 20110215, '第一中学', '', '', 190, 4, 0 UNION ALL
SELECT 20110215, '第一中学', '八年级', '', 150, 3, 0 UNION ALL
SELECT 20110215, '第一中学', '八年级', '一班', 25, 1, 1
--列转行
select RecDate,'学校'AS 统计对象,学校,'上课人数' AS 统计内容,上课人数 AS 人数 FROM @TempCall
UNION ALL
select RecDate,'学校'AS 统计对象,学校,'迟到人数' AS 统计内容,迟到人数 FROM @TempCall
UNION ALL
select RecDate,'学校'AS 统计对象,学校,'病假人数' AS 统计内容,病假人数 FROM @TempCall
UNION ALL
select RecDate,'年级'AS 统计对象,年级,'上课人数' AS 统计内容,上课人数 FROM @TempCall
UNION ALL
select RecDate,'年级'AS 统计对象,年级,'迟到人数' AS 统计内容,迟到人数 FROM @TempCall
UNION ALL
select RecDate,'年级'AS 统计对象,年级,'病假人数' AS 统计内容,病假人数 FROM @TempCall
UNION ALL
select RecDate,'班级'AS 统计对象,班级,'上课人数' AS 统计内容,上课人数 FROM @TempCall
UNION ALL
select RecDate,'班级'AS 统计对象,班级,'迟到人数' AS 统计内容,迟到人数 FROM @TempCall
UNION ALL
select RecDate,'班级'AS 统计对象,班级,'病假人数' AS 统计内容,病假人数 FROM @TempCall
--再行转列SUM(CASE WHEN 人数<=5 THEN ..........
意思不明白,不懂帮顶