番号 编号 数量
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
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
-- 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
--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]
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
*/
where (select count(1) from ta where 编号=a.编号 and 番号<=a.番号)<=数量
from (
select * ,t=(select count(1) from ta where 编号=a.编号 and 番号<=a.番号)
from ta a) b
where 数量>=t