当前位置: 代码迷 >> Sql Server >> MS Sql Server 按某一列求小计,但是不合并行;汇总求和;统计求和解决方法
  详细解决方案

MS Sql Server 按某一列求小计,但是不合并行;汇总求和;统计求和解决方法

热度:76   发布时间:2016-04-27 13:42:41.0
MS Sql Server 按某一列求小计,但是不合并行;汇总求和;统计求和
现在有一张如下图的基础数据:

需要查出的结果是:




创建表的代码:
CREATE TABLE [student] (
[id] [int] IDENTITY (1, 1) NOT NULL,
[学生] [varchar] (50) NULL,
[科目] [varchar] (50) NULL,
[分数] [int] NULL,
[学期] [varchar] (50) NULL,
[学号] [varchar] (50) NULL)

ALTER TABLE [student] WITH NOCHECK ADD CONSTRAINT [PK_student] PRIMARY KEY NONCLUSTERED ( [id] )
SET IDENTITY_INSERT [student] ON

测试数据:
INSERT [student] ([id],[学生],[科目],[分数],[学期],[学号]) VALUES ( 1,N'甲',N'语文',88,N'1',N'001')
INSERT [student] ([id],[学生],[科目],[分数],[学期],[学号]) VALUES ( 2,N'甲',N'英语',77,N'1',N'001')
INSERT [student] ([id],[学生],[科目],[分数],[学期],[学号]) VALUES ( 3,N'甲',N'数学',66,N'1',N'001')
INSERT [student] ([id],[学生],[科目],[分数],[学期],[学号]) VALUES ( 4,N'乙',N'语文',100,N'1',N'002')
INSERT [student] ([id],[学生],[科目],[分数],[学期],[学号]) VALUES ( 5,N'乙',N'英语',90,N'1',N'002')
INSERT [student] ([id],[学生],[科目],[分数],[学期],[学号]) VALUES ( 6,N'乙',N'数学',80,N'1',N'002')
INSERT [student] ([id],[学生],[科目],[分数],[学期],[学号]) VALUES ( 7,N'甲',N'语文',88,N'1',N'003')
INSERT [student] ([id],[学生],[科目],[分数],[学期],[学号]) VALUES ( 8,N'甲',N'英语',77,N'1',N'003')
INSERT [student] ([id],[学生],[科目],[分数],[学期],[学号]) VALUES ( 9,N'甲',N'数学',66,N'1',N'003')



------解决方案--------------------
SQL code
CREATE TABLE [student] ([id] [int] IDENTITY (1, 1) NOT NULL,[学生] [varchar] (50) NULL,[科目] [varchar] (50) NULL,[分数] [int] NULL,[学期] [varchar] (50) NULL,[学号] [varchar] (50) NULL)ALTER TABLE [student] WITH NOCHECK ADD CONSTRAINT [PK_student] PRIMARY KEY NONCLUSTERED ( [id] )SET IDENTITY_INSERT [student] ONINSERT [student] ([id],[学生],[科目],[分数],[学期],[学号]) VALUES ( 1,N'甲',N'语文',88,N'1',N'001')INSERT [student] ([id],[学生],[科目],[分数],[学期],[学号]) VALUES ( 2,N'甲',N'英语',77,N'1',N'001')INSERT [student] ([id],[学生],[科目],[分数],[学期],[学号]) VALUES ( 3,N'甲',N'数学',66,N'1',N'001')INSERT [student] ([id],[学生],[科目],[分数],[学期],[学号]) VALUES ( 4,N'乙',N'语文',100,N'1',N'002')INSERT [student] ([id],[学生],[科目],[分数],[学期],[学号]) VALUES ( 5,N'乙',N'英语',90,N'1',N'002')INSERT [student] ([id],[学生],[科目],[分数],[学期],[学号]) VALUES ( 6,N'乙',N'数学',80,N'1',N'002')INSERT [student] ([id],[学生],[科目],[分数],[学期],[学号]) VALUES ( 7,N'甲',N'语文',88,N'1',N'003')INSERT [student] ([id],[学生],[科目],[分数],[学期],[学号]) VALUES ( 8,N'甲',N'英语',77,N'1',N'003')INSERT [student] ([id],[学生],[科目],[分数],[学期],[学号]) VALUES ( 9,N'甲',N'数学',66,N'1',N'003');with tas(select 学生,科目,分数,学期,学号,学号 as id from [student]),m as(select 合计='合计',col2='',SUM(分数)as 分数,col3='',col4='',学号 from [student]group  by 学生,学号,学期,学号 )select 学生,科目,分数,学期,学号 from(select * from t union all select * from m)a order by id,学生 desc/*学生    科目    分数    学期    学号甲    语文    88    1    001甲    英语    77    1    001甲    数学    66    1    001合计        231        乙    语文    100    1    002乙    英语    90    1    002乙    数学    80    1    002合计        270        甲    语文    88    1    003甲    英语    77    1    003甲    数学    66    1    003合计        231        */解决了
  相关解决方案