首页 新闻 会员 周边 捐助

sql2008数据库

0
悬赏园豆:5 [已解决问题] 解决于 2014-06-05 12:22

A表

timeid 

0630

0700

0730

....

2300

2330

2400

值是(时分)

现在我要将这列转化

timeid 

00:00-06:30

06:30-07:00

......

23:30-24:00

每个时间点要取前一个时间点,如果取不到前一个则为0:00,以组成时间段

请教大神给个模板或者思路,谢谢

孤_的主页 孤_ | 初学一级 | 园豆:13
提问于:2014-06-05 10:04
< >
分享
最佳答案
0

给你个可行的思路:

先排序,并给出行号

在排序,并在前面union一个0000,并给出行号

把这两个表按照行号连接查询,并拼接字符串,最后一个不要,因为最后一个只有一个数据,所用可用top总数据量

收获园豆:5
刘宏玺 | 专家六级 |园豆:14020 | 2014-06-05 10:23

不太理解,给个简单的模板,跪谢。

孤_ | 园豆:13 (初学一级) | 2014-06-05 10:38

@孤_: 我没有sql server ,只有oracle的

刘宏玺 | 园豆:14020 (专家六级) | 2014-06-05 10:39

@孤_: 

select substr(t1, 1 ,2) || ':' || substr(t1, 3 ,4) || '-' || substr(t2, 1 ,2) || ':' || substr(t2, 3 ,4) from( 
select 0 r, '0000' t1 from a 
union
select rownum r, timeid t1 from a where timeid <> (select max(timeid) from a) order by t1) a
left join
(select rownum - 1 r, timeid t2 from a order by timeid) b
on a.r = b.r order by a.r
刘宏玺 | 园豆:14020 (专家六级) | 2014-06-05 11:18

@刘宏玺: 大神在帮个忙,

A表

postid postname

1    test1

2    test2

....

n    testn

B表

postid  value

1    eqer

2    dfsd

3    dfsd

....

 

我现在想

select
case postid when ' +convert(varchar,postid ) +
 ' then value else 0 end as postid + convert(varchar,postid ) +',' from A

到临时表,新的临时表每列列名用 A.postname

孤_ | 园豆:13 (初学一级) | 2014-06-05 16:02

@孤_: 说实话我没看懂,你是不是有其他代码啊?

具体想得到什么样的结果呢?

刘宏玺 | 园豆:14020 (专家六级) | 2014-06-05 16:06

@刘宏玺: 

c表

test1  test 2 ......

eqer dfsd .......

这样的效果

A.postName 列值没有共性 但是可以动态加入A表

孤_ | 园豆:13 (初学一级) | 2014-06-05 16:12

@孤_: 行列转换?

刘宏玺 | 园豆:14020 (专家六级) | 2014-06-05 16:13

@刘宏玺: 对

孤_ | 园豆:13 (初学一级) | 2014-06-05 16:14

@孤_: 你这么做有什么用呢?我感觉是费力不讨好啊

刘宏玺 | 园豆:14020 (专家六级) | 2014-06-05 16:15

@刘宏玺: 

declare @sqlpre varchar(800)
declare @sqllast varchar(800)
declare @sql1 varchar(8000)
set @sqlpre ='select '
set @sqllast  =' into temp0527  from  B ' --where TimerDate='' and TImeid '
set @sql1=''
select @sql1=@sql1 + ' case postid when ' +convert(varchar,postid) + ' then value else 0 end as postid' + convert(varchar,postid) +',' from A 


print( @sqlpre+ @sql1+ @sqllast)

直接由postid 可以,就是用postname 生成列名不行,帮我看看吧

孤_ | 园豆:13 (初学一级) | 2014-06-05 16:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册