tbl1
id ts_pm ts_cs
1 aa 成都
2 bb 上海
3 aa 天津
4 aa 北京
5 cc 南昌
5 cc 重庆
要求查询 ts_pm 相同的2条记录出来 只查询2条 就是一个ts_pm只查询2条
结果:
tbl1
id ts_pm ts_cs
----------------
1 aa 成都
4 aa 北京
5 cc 南昌
5 cc 重庆
id ts_pm ts_cs
1 aa 成都
2 bb 上海
3 aa 天津
4 aa 北京
5 cc 南昌
5 cc 重庆
要求查询 ts_pm 相同的2条记录出来 只查询2条 就是一个ts_pm只查询2条
结果:
tbl1
id ts_pm ts_cs
----------------
1 aa 成都
4 aa 北京
5 cc 南昌
5 cc 重庆
inner join
(select ts_pm,count(*) as ts_count from tbl1 group by ts_pm having count(*)=2)
b on a.ts_pm=b.ts_pm
order by a.id
是只查询2条记录
如果有N 条只查询2条
是不是就不要了?要也可以 (而且应该要)1 aa 成都
2 bb 上海
4 aa 北京
5 cc 南昌
5 cc 重庆-------
可以用游标吗?可以用游标写存储过程
from (select ts_pm from 表 group by ts_pm having count(*)>1) a,表 b
where a.ts_pm=b.ts_pm and b.id in
(
select top 2 id from 表 where ts_pm = a.ts_pm
)
order by id
ID INT,
TS_PM VARCHAR(10),
TS_CS VARCHAR(10)
)INSERT #TBL1
SELECT 1 , 'AA' , '成都' UNION
SELECT 2 , 'BB' , '上海' UNION
SELECT 3 , 'AA', '天津' UNION
SELECT 4 , 'AA', '北京' UNION
SELECT 5 , 'CC' , '南昌' UNION
SELECT 6 , 'CC' , '重庆'SELECT TOP 2 TS_CS FROM #TBL1 WHERE TS_PM IN (SELECT DISTINCT TS_PM FROM #TBL1)ORDER BY TS_PM
SELECT TS_PM, MAX(TS_CS),MIN(TS_CS) FROM #TBL1 GROUP BY TS_PM
CREATE TABLE #TEMP(
ID INT,
TS_PM VARCHAR(10),
TS_CS VARCHAR(10)
)
DECLARE @TS_SM VARCHAR(100)
DECLARE T CURSOR FOR
SELECT DISTINCT TS_PM FROM #TBL1OPEN TFETCH NEXT FROM T
INTO @TS_SM
WHILE @@FETCH_STATUS=0
BEGIN
INSERT #TEMP
SELECT TOP 2 ID,TS_PM,TS_CS FROM #TBL1 WHERE TS_PM=@TS_SM FETCH NEXT FROM T
INTO @TS_SM
ENDCLOSE T
DEALLOCATE TSELECT * FROM #TEMP
declare @t table(id int ,ts_pm varchar(10), ts_cs varchar(10))
insert into @t select 1,'aa','成都'
union all select 2,'bb','上海'
union all select 3,'aa','天津'
union all select 4,'aa','北京'
union all select 5,'cc','南昌'
union all select 5,'cc','重庆'select a.*
from @t a
where a.id in
(
select min(id) id from @t where ts_pm = a.ts_pm
union
select max(id) from @t where ts_pm = a.ts_pm
)
order by id/*
id ts_pm ts_cs
----------- ---------- ----------
1 aa 成都
2 bb 上海
4 aa 北京
5 cc 南昌
5 cc 重庆(所影响的行数为 5 行)*/
from #tbl1 a
where a.id in
(
select min(id) id from #tbl1 where ts_pm = a.ts_pm
union
select max(id) from #tbl1 where ts_pm = a.ts_pm
)
order by id好巧的语句,唯一的缺点就是如果取二条以上的记录有点麻烦。