A表
timeid
0630
0700
0730
....
2300
2330
2400
值是(时分)
现在我要将这列转化
timeid
00:00-06:30
06:30-07:00
......
23:30-24:00
每个时间点要取前一个时间点,如果取不到前一个则为0:00,以组成时间段
请教大神给个模板或者思路,谢谢
给你个可行的思路:
先排序,并给出行号
在排序,并在前面union一个0000,并给出行号
把这两个表按照行号连接查询,并拼接字符串,最后一个不要,因为最后一个只有一个数据,所用可用top总数据量
不太理解,给个简单的模板,跪谢。
@孤_: 我没有sql server ,只有oracle的
@孤_:
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
@刘宏玺: 大神在帮个忙,
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
@孤_: 说实话我没看懂,你是不是有其他代码啊?
具体想得到什么样的结果呢?
@刘宏玺:
c表
test1 test 2 ......
eqer dfsd .......
这样的效果
A.postName 列值没有共性 但是可以动态加入A表
@孤_: 行列转换?
@刘宏玺: 对
@孤_: 你这么做有什么用呢?我感觉是费力不讨好啊
@刘宏玺:
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 生成列名不行,帮我看看吧