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

每组一只一条解决思路

2012-09-23 
每组一只一条人员分组表SQL code组编号 组员姓名 组员信息1 组员信息2 。。。001张三汉族团员现在要找满足条

每组一只一条
人员分组表

SQL code
组编号 组员姓名 组员信息1 组员信息2 。。。001     张三     汉族      团员



现在要找满足条件的组,该组只要一个组员满足 要求的条件,这个组就满足

select * from 人员分组表 where 组员信息1 = 'aaa' and 组员信息2 = 'bbb' and ...
order by 组编号

这样,会得到结果,但每个组可能有多名组员被查出来,其实每组只需要一个就行了。怎么查呢?

[解决办法]
SQL code
CREATE TABLE test ([组编号] varchar(10),[组员姓名] varchar(10),[组员信息1] varchar(10),[组员信息2]varchar(10) )INSERT INTO testSELECT '001',     '张三','汉族',      '团员'UNION ALL SELECT '001',     '张三1','汉族',      '团员'UNION ALL SELECT '002',     '张三','汉族',      '团员'UNION ALL SELECT '002',     '张三1','汉族',      '团员'SELECT * FROM (SELECT NTILE(10) OVER(PARTITION BY [组编号],[组员信息1],[组员信息2] ORDER BY [组编号])id,* FROM test WHERE [组员信息1]='汉族' AND [组员信息2]='团员')bWHERE id=1id                   组编号        组员姓名       组员信息1      组员信息2-------------------- ---------- ---------- ---------- ----------1                    001        张三         汉族         团员1                    002        张三         汉族         团员(2 行受影响)
[解决办法]
select ID from 人员分组表 a where ID = 
(
select top 1 ID from 人员分组表 b where b.姓名='张三' and b.ID = a.ID
)
[解决办法]
用NTILE有风险吧?万一有某组满足条件的有11人的话.用NTILE岂不查多了?
SELECT * FROM (
SELECT row_number() OVER(PARTITION BY [组编号] ORDER BY [组编号]) id,* FROM test WHERE [组员信息1]='汉族' AND [组员信息2]='团员' ......
)b
WHERE id=1

热点排行