读书人

求教sql语句,该怎么解决

发布时间: 2012-03-19 22:03:04 作者: rapoo

求教sql语句
时间 项目1 项目2 项目3 项目4 项目5
2012-1-1 00:00:00 1 2 3 4 5
2012-1-1 01:00:00 6 7 8 9 10
2012-1-1 02:00:00 11 12 13 14 15
2012-1-1 03:00:00 16 17 18 19 20
...

取出2011-1-1的格式
时间 0 1 2 3 4 5 6 7 8 9。。。。24
项目1 1 6 11 16。。。
项目2 2 7 12 17。。。
项目3 3 8 13 18。。。
项目4 4 9 14 20。。。
项目5 5 10 20 25。。。









[解决办法]

SQL code
--       时间 项目1 项目2 项目3 项目4 项目5 
--2012-1-1 00:00:00 1 2 3 4 5
--2012-1-1 01:00:00 6 7 8 9 10
--2012-1-1 02:00:00 11 12 13 14 15
--2012-1-1 03:00:00 16 17 18 19 20
--...
if OBJECT_ID('tb') is not null
drop table tb
go
create table tb(时间 varchar(50),项目1 int,项目2 int, 项目3 int, 项目4 int, 项目5 int,)
insert into tb values('2012-1-1 00:00:00', 1, 2 ,3 ,4 ,5)
insert into tb values('2012-1-1 01:00:00', 6, 7 ,8 ,9 ,10)
insert into tb values('2012-1-1 02:00:00', 11, 12, 13, 14 ,15)
insert into tb values('2012-1-1 03:00:00', 16, 17 ,18, 19 ,20)
--取出2011-1-1的格式
--时间 0 1 2 3 4 5 6 7 8 9。。。。24
--项目1 1 6 11 16。。。
--项目2 2 7 12 17。。。
--项目3 3 8 13 18。。。
--项目4 4 9 14 20。。。
--项目5 5 10 20 25。。。

select '项目1'as 时间 ,
max(case DATEPART(HH,时间)when 0 then 项目1 else '0' end ) '0',
max(case DATEPART(HH,时间)when 1 then 项目1 else '0' end ) '1',
max(case DATEPART(HH,时间)when 2 then 项目1 else '0' end ) '2',
max(case DATEPART(HH,时间)when 3 then 项目1 else '0' end ) '3'
from tb t
union all
select '项目2'as 时间 ,
max(case DATEPART(HH,时间)when 0 then 项目2 else '0' end ) '0',
max(case DATEPART(HH,时间)when 1 then 项目2 else '0' end ) '1',
max(case DATEPART(HH,时间)when 2 then 项目2 else '0' end ) '2',
max(case DATEPART(HH,时间)when 3 then 项目2 else '0' end ) '3'
from tb t
union all
select '项目3'as 时间 ,
max(case DATEPART(HH,时间)when 0 then 项目3 else '0' end ) '0',
max(case DATEPART(HH,时间)when 1 then 项目3 else '0' end ) '1',
max(case DATEPART(HH,时间)when 2 then 项目3 else '0' end ) '2',
max(case DATEPART(HH,时间)when 3 then 项目3 else '0' end ) '3'
from tb t
union all
select '项目4'as 时间 ,
max(case DATEPART(HH,时间)when 0 then 项目4 else '0' end ) '0',
max(case DATEPART(HH,时间)when 1 then 项目4 else '0' end ) '1',
max(case DATEPART(HH,时间)when 2 then 项目4 else '0' end ) '2',
max(case DATEPART(HH,时间)when 3 then 项目4 else '0' end ) '3'
from tb t
union all
select '项目5'as 时间 ,
max(case DATEPART(HH,时间)when 0 then 项目5 else '0' end ) '0',
max(case DATEPART(HH,时间)when 1 then 项目5 else '0' end ) '1',
max(case DATEPART(HH,时间)when 2 then 项目5 else '0' end ) '2',
max(case DATEPART(HH,时间)when 3 then 项目5 else '0' end ) '3'
from tb t

时间 0 1 2 3
----- ----------- ----------- ----------- -----------
项目1 1 6 11 16


项目2 2 7 12 17
项目3 3 8 13 18
项目4 4 9 14 19
项目5 5 10 15 20

(5 行受影响)


[解决办法]
select
replace(convert(varchar(13),cast(datetime1 as datetime),120),convert(varchar(10),cast(datetime1 as datetime),120),convert(varchar(11),cast(datetime1 as datetime),120)) as mytime1
from table1
获取 年 月 日 时 中的 时

读书人网 >SQL Server

热点推荐