我现在有份数据如下:
类别 货号 金额
布类 1112 100
布类 1142 234
布类 3112 453
布类 1314 20
布类 1315 245
合金 2112 120
合金 2122 340
合金 2132 100
合金 2142 1340
合金 2152 10
合金 2162 1040
合金 2172 232
合金 2182 1300
银饰 3345 3239
银饰 3445 322
银饰 3545 324
银饰 3645 222239
银饰 3745 139
银饰 3845 333
银饰 3945 323
现在我想要将上面的数据分成两份,即每份都有各种类别,一份金额占60%左右,一份金额占40%左右。有什么好方法解决?!
类别 货号 金额
布类 1112 100
布类 1142 234
布类 3112 453
布类 1314 20
布类 1315 245
合金 2112 120
合金 2122 340
合金 2132 100
合金 2142 1340
合金 2152 10
合金 2162 1040
合金 2172 232
合金 2182 1300
银饰 3345 3239
银饰 3445 322
银饰 3545 324
银饰 3645 222239
银饰 3745 139
银饰 3845 333
银饰 3945 323
现在我想要将上面的数据分成两份,即每份都有各种类别,一份金额占60%左右,一份金额占40%左右。有什么好方法解决?!
select top 40 percent from table
不知道可以不?
insert 表2 select 类别,货号,金额*40% from 表
你的那句只是将所有的进行处理,并没有对每一类别进行处理,我要求是个类别要取后,合成后又大概成60%或40%ppact(天下有雪):
你的是将一个商品分两份,而我要的是商品在第一份中就不能在第二份中,反之一样。
DECLARE @t TABLE(类别 varchar(10), 货号 int, 金额 int)
INSERT @t SELECT '布类', 1112, 100
UNION ALL SELECT '布类', 1142, 234
UNION ALL SELECT '布类', 3112, 453
UNION ALL SELECT '布类', 1314, 20
UNION ALL SELECT '布类', 1315, 245
UNION ALL SELECT '合金', 2112, 120
UNION ALL SELECT '合金', 2122, 340
UNION ALL SELECT '合金', 2132, 100
UNION ALL SELECT '合金', 2142, 1340
UNION ALL SELECT '合金', 2152, 10
UNION ALL SELECT '合金', 2162, 1040
UNION ALL SELECT '合金', 2172, 232
UNION ALL SELECT '合金', 2182, 1300
UNION ALL SELECT '银饰', 3345, 3239
UNION ALL SELECT '银饰', 3445, 322
UNION ALL SELECT '银饰', 3545, 324
UNION ALL SELECT '银饰', 3645, 222239
UNION ALL SELECT '银饰', 3745, 139
UNION ALL SELECT '银饰', 3845, 333
UNION ALL SELECT '银饰', 3945, 323-- 40%
SELECT A.*
FROM @t A
INNER JOIN(
SELECT 类别, 金额 = SUM(金额) * .4
FROM @t
GROUP BY 类别
)B
ON A.类别 = B.类别
AND B.金额 >= (
SELECT SUM(金额) FROM @t
WHERE 类别 = A.类别
AND (金额 < A.金额 OR 金额 = A.金额 AND 货号 <= A.货号))-- 60%
SELECT A.*
FROM @t A
INNER JOIN(
SELECT 类别, 金额 = SUM(金额) * .4
FROM @t
GROUP BY 类别
)B
ON A.类别 = B.类别
AND B.金额 < (
SELECT SUM(金额) FROM @t
WHERE 类别 = A.类别
AND (金额 < A.金额 OR 金额 = A.金额 AND 货号 <= A.货号))
create table allsum(id int identity(1,1),类别 varchar(10), 货号 varchar(10), 金额 int )insert into allsum(类别,货号,金额)
select '布类' ,1112 , 100 union all
select'布类' ,1142 , 234 union all
select'布类' , 3112 , 453 union all
select'布类' , 1314 , 20 union all
select'布类' ,1315 , 245 union all
select'合金' , 2112 , 120 union all
select'合金' , 2122 , 340 union all
select'合金' , 2132 , 100 union all
select'合金' , 2142 , 1340 union all
select'合金' , 2152 , 10 union all
select'合金' , 2162 , 1040 union all
select'合金' , 2172 , 232 union all
select'合金' , 2182 , 1300 union all
select'银饰' , 3345 , 3239 union all
select'银饰' , 3445 , 322 union all
select'银饰' , 3545, 324 union all
select'银饰' , 3645 , 222239 union all
select'银饰' , 3745, 139 union all
select'银饰' , 3845 , 333 union all
select'银饰' , 3945 , 323select * from allsum
--60%
select 类别,货号 into #temp6 from(
select 类别,货号,id,
convert(decimal (3,1),
(select count(1) from allsum a where a.id<=allsum.id and a.类别=allsum.类别 ))
/
convert(decimal(3,1),(select count(1) from allsum c where c.类别=allsum.类别))
as bb
from allsum
)a where bb <=0.6--40%--drop table allsum,#temp1,#temp2
create table allsum(id int identity(1,1),类别 varchar(10), 货号 varchar(10), 金额 int )insert into allsum(类别,货号,金额)
select '布类' ,1112 , 100 union all
select'布类' ,1142 , 234 union all
select'布类' , 3112 , 453 union all
select'布类' , 1314 , 20 union all
select'布类' ,1315 , 245 union all
select'合金' , 2112 , 120 union all
select'合金' , 2122 , 340 union all
select'合金' , 2132 , 100 union all
select'合金' , 2142 , 1340 union all
select'合金' , 2152 , 10 union all
select'合金' , 2162 , 1040 union all
select'合金' , 2172 , 232 union all
select'合金' , 2182 , 1300 union all
select'银饰' , 3345 , 3239 union all
select'银饰' , 3445 , 322 union all
select'银饰' , 3545, 324 union all
select'银饰' , 3645 , 222239 union all
select'银饰' , 3745, 139 union all
select'银饰' , 3845 , 333 union all
select'银饰' , 3945 , 323select * from allsum
--60%
select 类别,货号 ,金额 into #temp1 from(
select 类别,货号,金额,id,
convert(decimal (3,1),
(select count(1) from allsum a where a.id<=allsum.id and a.类别=allsum.类别 ))
/
convert(decimal(3,1),(select count(1) from allsum c where c.类别=allsum.类别))
as bb
from allsum
)a where bb <=0.6
--40%select * from #temp1
--drop table allsum,#temp1,#temp2
老大写的比较好,自己虽然不行,但也想拿出来让大家一笑吧。哈哈