番号         编号               数量
11991543 201-080818-125557 1
11991679 201-080820-195810 1
11991750 201-080822-123831 1
11991959 201-080827-153317 1
11992133 201-080829-190007 2
11992134 201-080829-190007 2
11992135 201-080829-190007 2
11992136 201-080829-190007 2
11992232 201-080901-160926 1
11992254 201-080901-160926 1
11992255 201-080901-160926 1
11992256 201-080901-160926 1
11992364 201-080903-183451 6
11992365 201-080903-183451 6
11992366 201-080903-183451 6
11992367 201-080903-183451 6
11992368 201-080903-183451 6
11992369 201-080903-183451 6
11992388 201-080904-121240 1
11992389 201-080904-121240 1
11992390 201-080904-121240 1
11992391 201-080904-121240 1如果编号一样的话,数量为小于同一个编号的和时,取番号的前“数量”条记录?这个该怎么实现?
想得到如理结果:
番号         编号               数量
1991543         201-080818-125557 1
11991679 201-080820-195810 1
11991750 201-080822-123831 1
11991959 201-080827-153317 1
11992133 201-080829-190007 2
11992134 201-080829-190007 2
11992232 201-080901-160926 1
11992364 201-080903-183451 6
11992365 201-080903-183451 6
11992366 201-080903-183451 6
11992367 201-080903-183451 6
11992368 201-080903-183451 6
11992369 201-080903-183451 6
11992388 201-080904-121240 1

解决方案 »

  1.   

    ------------------------------------
    -- Author:  happyflsytone  
    -- Date:2008-10-11 15:26:35
    -------------------------------------- Test Data: ta
    IF OBJECT_ID('ta') IS NOT NULL 
        DROP TABLE ta
    Go
    CREATE TABLE ta(番号 INT,编号 NVARCHAR(17),数量 INT)
    Go
    INSERT INTO ta
    SELECT 11991543,'201-080818-125557',1 UNION ALL
    SELECT 11991679,'201-080820-195810',1 UNION ALL
    SELECT 11991750,'201-080822-123831',1 UNION ALL
    SELECT 11991959,'201-080827-153317',1 UNION ALL
    SELECT 11992133,'201-080829-190007',2 UNION ALL
    SELECT 11992134,'201-080829-190007',2 UNION ALL
    SELECT 11992135,'201-080829-190007',2 UNION ALL
    SELECT 11992136,'201-080829-190007',2 UNION ALL
    SELECT 11992232,'201-080901-160926',1 UNION ALL
    SELECT 11992254,'201-080901-160926',1 UNION ALL
    SELECT 11992255,'201-080901-160926',1 UNION ALL
    SELECT 11992256,'201-080901-160926',1 UNION ALL
    SELECT 11992364,'201-080903-183451',6 UNION ALL
    SELECT 11992365,'201-080903-183451',6 UNION ALL
    SELECT 11992366,'201-080903-183451',6 UNION ALL
    SELECT 11992367,'201-080903-183451',6 UNION ALL
    SELECT 11992368,'201-080903-183451',6 UNION ALL
    SELECT 11992369,'201-080903-183451',6 UNION ALL
    SELECT 11992388,'201-080904-121240',1 UNION ALL
    SELECT 11992389,'201-080904-121240',1 UNION ALL
    SELECT 11992390,'201-080904-121240',1 UNION ALL
    SELECT 11992391,'201-080904-121240',1 
    GO
    --Start
    ;with c
    as(select rowid = row_number() over(partition by 编号 order by 番号),* from ta)
    select 番号  ,编号  ,数量
    from c 
    where rowid <= 数量
    order by  番号
    --Result:
    /*
    番号          编号                数量
    ----------- ----------------- -----------
    11991543    201-080818-125557 1
    11991679    201-080820-195810 1
    11991750    201-080822-123831 1
    11991959    201-080827-153317 1
    11992133    201-080829-190007 2
    11992134    201-080829-190007 2
    11992232    201-080901-160926 1
    11992364    201-080903-183451 6
    11992365    201-080903-183451 6
    11992366    201-080903-183451 6
    11992367    201-080903-183451 6
    11992368    201-080903-183451 6
    11992369    201-080903-183451 6
    11992388    201-080904-121240 1(14 行受影响)*/
    --End 
      

  2.   

    我的是SQL2000的,用不了你的语句
      

  3.   

    [code=SQL]--借狙的数据
    --2000------------------------------------
    -- Author:  happyflsytone  
    -- Date:2008-10-11 15:26:35
    -------------------------------------- Test Data: ta
    IF OBJECT_ID('ta') IS NOT NULL 
        DROP TABLE ta
    Go
    CREATE TABLE ta(番号 INT,编号 NVARCHAR(17),数量 INT)
    Go
    INSERT INTO ta
    SELECT 11991543,'201-080818-125557',1 UNION ALL
    SELECT 11991679,'201-080820-195810',1 UNION ALL
    SELECT 11991750,'201-080822-123831',1 UNION ALL
    SELECT 11991959,'201-080827-153317',1 UNION ALL
    SELECT 11992133,'201-080829-190007',2 UNION ALL
    SELECT 11992134,'201-080829-190007',2 UNION ALL
    SELECT 11992135,'201-080829-190007',2 UNION ALL
    SELECT 11992136,'201-080829-190007',2 UNION ALL
    SELECT 11992232,'201-080901-160926',1 UNION ALL
    SELECT 11992254,'201-080901-160926',1 UNION ALL
    SELECT 11992255,'201-080901-160926',1 UNION ALL
    SELECT 11992256,'201-080901-160926',1 UNION ALL
    SELECT 11992364,'201-080903-183451',6 UNION ALL
    SELECT 11992365,'201-080903-183451',6 UNION ALL
    SELECT 11992366,'201-080903-183451',6 UNION ALL
    SELECT 11992367,'201-080903-183451',6 UNION ALL
    SELECT 11992368,'201-080903-183451',6 UNION ALL
    SELECT 11992369,'201-080903-183451',6 UNION ALL
    SELECT 11992388,'201-080904-121240',1 UNION ALL
    SELECT 11992389,'201-080904-121240',1 UNION ALL
    SELECT 11992390,'201-080904-121240',1 UNION ALL
    SELECT 11992391,'201-080904-121240',1 
    GOSELECT 番号,编号,数量
    FROM
    (
      SELECT *,
             rowid=(
                SELECT COUNT(*)
                FROM ta
                WHERE 编号=a.编号
                  AND 番号<=a.番号
                   )
      FROM ta AS a
    ) AS t
    WHERE rowid<=数量
    ORDER BY 番号/*
    番号          编号                数量
    ----------- ----------------- -----------
    11991543    201-080818-125557 1
    11991679    201-080820-195810 1
    11991750    201-080822-123831 1
    11991959    201-080827-153317 1
    11992133    201-080829-190007 2
    11992134    201-080829-190007 2
    11992232    201-080901-160926 1
    11992364    201-080903-183451 6
    11992365    201-080903-183451 6
    11992366    201-080903-183451 6
    11992367    201-080903-183451 6
    11992368    201-080903-183451 6
    11992369    201-080903-183451 6
    11992388    201-080904-121240 1(14 行受影响)*/
    [/code]
      

  4.   

    --2000
    IF OBJECT_ID('ta') IS NOT NULL 
        DROP TABLE ta
    Go
    CREATE TABLE ta(番号 INT,编号 NVARCHAR(17),数量 INT)
    Go
    INSERT INTO ta
    SELECT 11991543,'201-080818-125557',1 UNION ALL
    SELECT 11991679,'201-080820-195810',1 UNION ALL
    SELECT 11991750,'201-080822-123831',1 UNION ALL
    SELECT 11991959,'201-080827-153317',1 UNION ALL
    SELECT 11992133,'201-080829-190007',2 UNION ALL
    SELECT 11992134,'201-080829-190007',2 UNION ALL
    SELECT 11992135,'201-080829-190007',2 UNION ALL
    SELECT 11992136,'201-080829-190007',2 UNION ALL
    SELECT 11992232,'201-080901-160926',1 UNION ALL
    SELECT 11992254,'201-080901-160926',1 UNION ALL
    SELECT 11992255,'201-080901-160926',1 UNION ALL
    SELECT 11992256,'201-080901-160926',1 UNION ALL
    SELECT 11992364,'201-080903-183451',6 UNION ALL
    SELECT 11992365,'201-080903-183451',6 UNION ALL
    SELECT 11992366,'201-080903-183451',6 UNION ALL
    SELECT 11992367,'201-080903-183451',6 UNION ALL
    SELECT 11992368,'201-080903-183451',6 UNION ALL
    SELECT 11992369,'201-080903-183451',6 UNION ALL
    SELECT 11992388,'201-080904-121240',1 UNION ALL
    SELECT 11992389,'201-080904-121240',1 UNION ALL
    SELECT 11992390,'201-080904-121240',1 UNION ALL
    SELECT 11992391,'201-080904-121240',1 
    GO
    select 番号  ,编号  ,数量
    from (select * ,(select count(*)+1 from ta t1 where t1.编号=t2.编号 and t1.番号 <t2.番号 )as 排名 from ta t2 )t
    where 排名<=数量
    /*
    番号          编号                数量          
    ----------- ----------------- ----------- 
    11991543    201-080818-125557 1
    11991679    201-080820-195810 1
    11991750    201-080822-123831 1
    11991959    201-080827-153317 1
    11992133    201-080829-190007 2
    11992134    201-080829-190007 2
    11992232    201-080901-160926 1
    11992364    201-080903-183451 6
    11992365    201-080903-183451 6
    11992366    201-080903-183451 6
    11992367    201-080903-183451 6
    11992368    201-080903-183451 6
    11992369    201-080903-183451 6
    11992388    201-080904-121240 1
    */
      

  5.   

    2000写法select * from ta a
    where (select count(1) from ta where 编号=a.编号 and 番号<=a.番号)<=数量
      

  6.   

    select 番号  ,编号  ,数量
    from (
    select * ,t=(select count(1) from ta where 编号=a.编号 and 番号<=a.番号)
    from ta a) b
    where 数量>=t