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        重庆

解决方案 »

  1.   

    select * from tbl1 a
        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.   

    yongtang(Reloaded) 不对。不是只查询2条记录的
    是只查询2条记录
    如果有N 条只查询2条
      

  3.   

    如果只有一条的呢?
    是不是就不要了?要也可以 (而且应该要)1        aa        成都  
    2        bb        上海  
    4        aa        北京  
    5        cc        南昌  
    5        cc        重庆-------
    可以用游标吗?可以用游标写存储过程
      

  4.   

    select b.*
       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
      

  5.   

    CREATE TABLE #TBL1 (
    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
      

  6.   

    --或者:
    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 行)*/
      

  7.   

    select a.*
    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好巧的语句,唯一的缺点就是如果取二条以上的记录有点麻烦。