怎样将记录分成我想要的两份?----急,在线等!

smalllove 2006-06-08 05:51:10
我现在有份数据如下:
类别 货号 金额
布类 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%左右。

有什么好方法解决?!

...全文
160 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
superunusa 2006-06-08
  • 打赏
  • 举报
回复
行了,大家也笑够了吧。我自己都笑了,理解错了楼主的意思了。我以把所有‘类型’相同的记录按6:4分到两个表中。最后一看老大的语句才知道错了。。。。
superunusa 2006-06-08
  • 打赏
  • 举报
回复





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 , 323

select * 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


老大写的比较好,自己虽然不行,但也想拿出来让大家一笑吧。哈哈。。。。。。
superunusa 2006-06-08
  • 打赏
  • 举报
回复





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 , 323

select * 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
zjcxc 元老 2006-06-08
  • 打赏
  • 举报
回复
-- 结果: 40%

类别 货号 金额
---------- ----------- -----------
布类 1112 100
布类 1142 234
布类 1314 20
合金 2112 120
合金 2122 340
合金 2132 100
合金 2152 10
合金 2172 232
银饰 3345 3239
银饰 3445 322
银饰 3545 324
银饰 3745 139
银饰 3845 333
银饰 3945 323

(14 行受影响)


-- 结果: 60%

类别 货号 金额
---------- ----------- -----------
布类 3112 453
布类 1315 245
合金 2142 1340
合金 2162 1040
合金 2182 1300
银饰 3645 222239

(6 行受影响)

zjcxc 元老 2006-06-08
  • 打赏
  • 举报
回复
-- 示例数据
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.货号))
dssw 2006-06-08
  • 打赏
  • 举报
回复
我想很复杂,价格的和在60%的排列组合是什多的,到一要哪一组。想得头都大拉。关注ing
ppact 2006-06-08
  • 打赏
  • 举报
回复

学习咯
smalllove 2006-06-08
  • 打赏
  • 举报
回复
gahade(东北爷们) :
你的那句只是将所有的进行处理,并没有对每一类别进行处理,我要求是个类别要取后,合成后又大概成60%或40%

ppact(天下有雪):
你的是将一个商品分两份,而我要的是商品在第一份中就不能在第二份中,反之一样。

ppact 2006-06-08
  • 打赏
  • 举报
回复
insert 表1 select 类别,货号,金额*60% from 表
insert 表2 select 类别,货号,金额*40% from 表
gahade 2006-06-08
  • 打赏
  • 举报
回复
select TOP 60 PERCENT from table
select top 40 percent from table
不知道可以不?

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧