首先看表

查询要求:查询每一天每一个小时的数据
比如 按照[StartTime]划分为四天 ,然后统计每一个小时的数据 每一个id对应的是一条数据
日期\小时 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
2014-08-18 1
2014-08-19 1
2014-08-20 1 0 1 0 0 1
2014-08-21 1 0 0 0 1
最后按照时间排序 8-21的要排在第一 8-18的排在最后
这个查询比较复杂 求高手指导 多谢了 百度很久了
目前只能够写出一条不能够满足要求的语句
declare @sql nvarchar(max)
select @sql=stuff((select ','+quotename(convert(varchar,number))
from master..spt_values where type='P' and number<24 for xml path('')) ,1,1,'')
set @sql='select top 2* from (select ID,datepart(hh,[StartTime])time,count(ID)sc
from [QUMobMobilePaySdk].[dbo].[QPS_SyncTasks]
where [SyncType]=1 group by ID,datepart(hh,[StartTime]))t pivot (sum(sc)
for time in ('+@sql+'))a' exec(@sql)
------解决思路----------------------
oracle的写法,参考下思路吧
SELECT TO_CHAR(TIME,'YYYY-MM-DD') AS 日期,
SUM(DECODE(TO_CHAR(TIME,'HH24'),'00',1)) AS "0",
SUM(DECODE(TO_CHAR(TIME,'HH24'),'01',1)) AS "1",
……
SUM(DECODE(TO_CHAR(TIME,'HH24'),'24',1)) AS "24",
FROM T
GROUP BY TO_CHAR(TIME,'YYYY-MM-DD')
order by min(TO_CHAR(TIME,'HH24'))
------解决思路----------------------
我写一个MSSQL的~~
DECLARE @SQL VARCHAR(8000)
SET @SQL='SELECT CONVERT(VARCHAR(10),[StartTime],120)[日期\小时]'
DECLARE @INDEX INT
SET @INDEX=1
WHILE @INDEX<=24
BEGIN
SET @SQL=@SQL+',SUM(CASE WHEN DATEPART(HH,[StartTime])='+CAST(@INDEX AS VARCHAR(2))+' THEN 1 END)['+CAST(@INDEX AS VARCHAR(2))+']'
SET @INDEX=@INDEX+1
END
SET @SQL=@SQL+'FROM[QPS_SyncTasks]GROUP BY CONVERT(VARCHAR(10),[StartTime],120)ORDER BY[日期\小时]DESC'
EXEC(@SQL)
------解决思路----------------------
declare @sql nvarchar(max)
select @sql=stuff((select ','+quotename(convert(varchar,number))
from master..spt_values where type='P' and number<24 for xml path('')) ,1,1,'')
set @sql='select top 2* from (select convert(varchar(10), [StartTime],120) as [日期\小时],datepart(hh,[StartTime]) [time],count(ID)sc
from [QUMobMobilePaySdk].[dbo].[QPS_SyncTasks]
where [SyncType]=1 group by convert(varchar(10), [StartTime],120),datepart(hh,[StartTime]))t pivot (sum(sc)
for time in ('+@sql+'))a'
--exec(@sql)
print @sql