表:
  id   tid   sort   uname
  1     1     1      aa
  2     1     2      bb
  3     1     9999   cc
  4     1     9999   dd
  5     2     9999   ee
  6     3     9999   ff
  7     3     1      gg
  8     4     1      hh
  9     4     2      ii
求数据集:
  id    tid   sort   uname
  1      1     1      aa
  2      1     2      bb
  5      2     9999   ee
  7      3     1      gg
  6      3     9999   ff
  8      4     1      hh
  9      4     2      ii
即得到不同tid的前两位,同一tid的按sort排序。 求正解

解决方案 »

  1.   

    select *
    from tb t
    where sort in(select top 2 sort from tb where tid=t.tid order by sort)
    order by tid,sort
      

  2.   

    with T as (
    select 1 as ID,1 as tid,1 as sort,'aa' as uname union all
    select 2,1,2,'bb' union all
    select 3,1,9999,'cc' union all
    select 4,1,9999,'dd' union all
    select 5,2,9999,'ee' union all
    select 6,3,9999,'ff' union all
    select 7,3,1,'gg' union all
    select 8,4,1,'hh' union all
    select 9,4,2,'ii' 
    ),T2 AS (
    select row_number() over ( PARTITION BY tid order by sort) Row, * from t )
    SELECT * FROM t2 where Row<=2----------------
    1 1 1 1 aa
    2 2 1 2 bb
    1 5 2 9999 ee
    1 7 3 1 gg
    2 6 3 9999 ff
    1 8 4 1 hh
    2 9 4 2 ii
      

  3.   


    IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'tba')
    BEGIN
    DROP TABLE tba
    END
    GO
    CREATE TABLE tba
    (
    id INT,
    tid INT,
    sort INT,
    uname VARCHAR(10)
    )
    GO
    INSERT INTO tba
    SELECT 1, 1, 1, 'aa' UNION
    SELECT   2, 1, 2, 'bb' UNION
    SELECT   3, 1, 9999, 'cc' UNION
    SELECT   4, 1, 9999, 'dd' UNION
    SELECT   5, 2, 9999, 'ee' UNION
    SELECT   6, 3, 9999, 'ff' UNION
    SELECT   7, 3, 1, 'gg' UNION
     SELECT  8, 4, 1, 'hh' UNION
    SELECT   9, 4, 2, 'ii'SELECT id,tid,sort,uname
    FROM tba as T
    WHERE (SELECT COUNT(*) FROM tba WHERE t.tid = tid AND sort < t.sort) < 2
    ORDER BY tid,sortid tid sort uname
    1 1 1 aa
    2 1 2 bb
    5 2 9999 ee
    6 3 9999 ff
    7 3 1 gg
    8 4 1 hh
    9 4 2 ii
      

  4.   


    结果贴错了id tid sort uname
    1 1 1 aa
    2 1 2 bb
    5 2 9999 ee
    7 3 1 gg
    6 3 9999 ff
    8 4 1 hh
    9 4 2 ii