求助!有关于对SQL数据处理的问题!

wwkjddyh 2010-09-25 01:37:47
我想对一组数据进行处理,原数据为:
a列 b列
1 2.8
2 3.6
我想通过sql语句能将此数据处理为:
a列 b列
1 1
1 1
1 0.8
2 1
2 1
2 1
2 0.6
也就是处理完的结果分组求和的值为处理完前数据的值!
是在sqlserver 2005环境下处理的!通过查询不知道能不能完成此数据处理?
...全文
57 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wwkjddyh 2010-09-25
多谢!我已经成功处理了我需要的数据!再问一个问题!在查询可否直接将数据导出至csv文件?
[Quote=引用 2 楼 beirut 的回复:]
SQL code
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([a列] int,[b列] numeric(2,1))
insert [tb]
select 1,2.8 union all
select 2,3.6
go

-->测试开始
select a……
[/Quote]
回复
chuifengde 2010-09-25
DECLARE @a TABLE(a INT,b DECIMAL(20,1))
INSERT @a SELECT 1, 2.8
union all SELECT 2, 3.6
UNION ALL SELECT 3, .3

SELECT a.a,CASE WHEN number<CEILING(a.b) THEN 1.0 ELSE a.b-FLOOR(a.b) END b FROM @a a ,MASTER..spt_values b
WHERE TYPE='P' AND number BETWEEN 1 AND CEILING (a.b)
ORDER BY a.a,number
--result
/*a b
----------- ------------------------
1 1.0
1 1.0
1 .8
2 1.0
2 1.0
2 1.0
2 .6
3 .3

(所影响的行数为 8 行)
*/
回复
小_爱 2010-09-25
[Quote=引用 1 楼 bancxc 的回复:]
SQL code
while exists(select top 1 from tb where b>1)
begin
select top 1 @id=id,@a=a from tb where b>1
insert into tb(a,b) values(@a,1)
update tb set b=b-1 where id=@id
end
[/Quote]大王出山了,膜拜。v5
回复
小_爱 2010-09-25
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([a列] int,[b列] numeric(2,1))
insert [tb]
select 1,2.8 union all
select 2,3.6
go

-->测试开始
select a列,1[b列]from [tb] t, master..spt_values s
where s.number between 1 and floor([b列])
and s.type='p'
union all
select a列,[b列]-floor([b列]) from [tb]
order by a列,b列 desc
/*
a列 b列
----------- ---------------------------------------
1 1.0
1 1.0
1 0.8
2 1.0
2 1.0
2 1.0
2 0.6

(7 行受影响)


*/
回复
bancxc 2010-09-25
while exists(select top 1 from tb where b>1)
begin
select top 1 @id=id,@a=a from tb where b>1
insert into tb(a,b) values(@a,1)
update tb set b=b-1 where id=@id
end
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2010-09-25 01:37
社区公告
暂无公告