首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL 班级分组查询,该如何处理

2012-12-17 
SQL 班级分组查询本帖最后由 jzkaixin 于 2012-11-27 08:34:47 编辑ID姓名性别年龄班级1张三11812李四1181

SQL 班级分组查询
本帖最后由 jzkaixin 于 2012-11-27 08:34:47 编辑 ID姓名    性别      年龄     班级
1       张三     1       18       1
2       李四     1       18       1
3       赵武     1       19       1
4       小明     1       17       1
5       刘涛     1       18       2
6       小红     2       17       2
7       小芳     2       18       2
8       小红     2       18       2
9       张三     1       18       1
10      李四     1       17       1


班级表
我想以班级分组显示  
select 姓名,性别,年龄 From Kx001 GROUP BY 班级

如何实现?

select 姓名,性别,年龄 From Kx001 GROUP BY 班级,姓名,性别,年龄

如果这样的话 有一个问题 那就是 同名的同学只会显示出来一个 



比如 张三  名字 年龄 性别一样 这样就只显示一个张三了!
[最优解释]
不太懂楼主的意思,难道是要下面的结果? 但是这个结果个人觉得没什么意义


--测试数据
if OBJECT_ID('student') is not null drop table student
create table student(ID int identity(1,1),姓名 nvarchar(20),性别 int,年龄 int,班级 int)
go
insert into student(姓名,性别,年龄,班级)
select '张三',1,18,1 union all
select '李四',1,18,1 union all
select '赵武',1,19,1 union all
select '小明',1,17,1 union all
select '刘涛',1,18,2 union all
select '小红',2,17,2 union all
select '小芳',2,18,2 union all
select '小红',2,18,2 union all
select '张三',1,18,1 union all
select '李四',1,17,1
--查询
select 姓名,性别,年龄 From student GROUP BY 班级,姓名,性别,年龄
union all
select 姓名,性别,年龄 From student GROUP BY 班级,姓名,性别,年龄 having COUNT(1)>1

/**
姓名                   性别          年龄
-------------------- ----------- -----------
李四                   1           17
李四                   1           18
小明                   1           17


张三                   1           18
赵武                   1           19
刘涛                   1           18
小芳                   2           18
小红                   2           17
小红                   2           18
张三                   1           18

(10 行受影响)
**/


[其他解释]
楼主想实现什么效果?
[其他解释]
先根据班级升序排列 order by class 
再去重

前提是 你一个班里不会出现两个 相同姓名 年龄 性别的人
[其他解释]
没明白lz的意思
[其他解释]

----------------------------
-- Author  :TravyLee(物是人非事事休,欲语泪先流!)
-- Date    :2012-11-27 12:19:06
-- Version:
--      Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) 
--Jul  9 2008 14:43:34 
--Copyright (c) 1988-2008 Microsoft Corporation
--Developer Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
--
----------------------------
--> 测试数据:[test]
if object_id('[test]') is not null 
drop table [test]
go 
create table [test]
(
[ID] int,
[姓名] varchar(4),
[性别] int,
[年龄] int,
[班级] int
)
insert [test]
select 1,'张三',1,18,1 union all
select 2,'李四',1,18,1 union all
select 3,'赵武',1,19,1 union all
select 4,'小明',1,17,1 union all
select 5,'刘涛',1,18,2 union all
select 6,'小红',2,17,2 union all
select 7,'小芳',2,18,2 union all
select 8,'小红',2,18,2 union all
select 9,'张三',1,18,1 union all
select 10,'李四',1,17,1
go

select
*
from
test a
where
a.ID=(
select
min(ID)
from
test b
where
a.姓名=b.姓名 
and a.性别=b.性别
and a.年龄=b.年龄
 )
order by
id
/*
ID          姓名   性别          年龄          班级
----------- ---- ----------- ----------- -----------


1           张三   1           18          1
2           李四   1           18          1
3           赵武   1           19          1
4           小明   1           17          1
5           刘涛   1           18          2
6           小红   2           17          2
7           小芳   2           18          2
8           小红   2           18          2
10          李四   1           17          1

(9 行受影响)


*/

--按照你的意思就是这个结果  但是估计你不是这个意思  给出你期待的结果


[其他解释]
select *,ROW_NUMBER() over(partition by [班级] order by [姓名]) AS 分组 from test

热点排行