declare @t table(id int,p int,g numeric(18,2),m numeric(18,2))
insert into @t(id,p,g,m)
select 1001,3,40.00,4.0 union all
select 1002,30,900.00,75.00 union all
select 1003,10,800.00,70.00
平分条件只有一个值 ,比如我输入: 2 想得到如下数据:
/*
groupName id p g m
----------- ----------- ----------- ----------- -----------
1 1001 3 40 4
1 1002 18 540 45
2 1002 12 360 30
2 1003 10 800 70
*/
如果输入3应该会分成3份。
------解决方案--------------------
真的,没看很明白.要求达到什么效果
------解决方案--------------------
的确描述的不清楚
输入个2 是想分第二条记录? 按什么规则分? 你一楼的表述看数据应该是分成5份,按3:2的比例分配,按id排序。后面的回复那个看起来是按7:3的比例分配,但是排序规则又按什么?
------解决方案--------------------
你敢把需求说的更不明白点么?
既然来提问了,就把问题说的清楚明了些。
这样让别人猜你的意图,浪费时间,浪费精力,你说呢?
------解决方案--------------------
经过我的深思熟虑,其实你的意思。。。真不明白什么意思。嘿
------解决方案--------------------
按ID顺序切分?
------解决方案--------------------
硬是没看懂是怎么分的?
------解决方案--------------------
DECLARE @t TABLE
(
id INT ,
p INT ,
g NUMERIC(18 , 2) ,
m NUMERIC(18 , 2)
)
INSERT INTO @t (id , p , g , m)
SELECT 1001 , 3 , 40.00 , 4.0
UNION ALL
SELECT 1002 , 30 , 900.00 , 75.00
UNION ALL
SELECT 1003 , 10 , 800.00 , 70.00
DECLARE @tb TABLE
(
id INT ,
p INT ,
g NUMERIC(18 , 2) ,
m NUMERIC(18 , 2)
)
DECLARE @cnt INT ,
@i INT ,
@j INT ,
@id INT ,
@p INT ,
@p_new INT ,
@g NUMERIC(18 , 2) ,
@g_new NUMERIC(18 , 2) ,
@m NUMERIC(18 , 2) ,
@m_new NUMERIC(18 , 2) ,
@w INT
SET @i = 2/*这里设置分组次数*/
SET @j = 1
SELECT @cnt = SUM(p)
FROM @t
INSERT INTO @tb
SELECT *
FROM @t
WHERE p <= @cnt / @i
DECLARE c CURSOR
FOR
SELECT * FROM @t WHERE p>@cnt/@i
OPEN c
FETCH NEXT FROM c INTO @id ,@p, @g,@m ;
WHILE @@FETCH_STATUS = 0