sql 查询 当天 每小时 总量 横排

qqzeng-ip 2011-11-30 05:53:56
有表

id , CreateTime

只要 某个时间点 有 都是显示 没有的则不显示

竖排的效果如下:(时间 9 为9点钟的 总量)
时间 总量
9 187
10 369
11 340
12 56
13 374
14 381
15 307
16 410
17 446


我要 横排 效果:
时间 9 10 11 12 …… 17
总量 187 369 ……

该如何写 thanks!
...全文
116 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsy999 2011-11-30
  • 打赏
  • 举报
回复
静态写法:
select id as '时间',
sum(case id when '9' then CreateTime else 0 end) as '9,
sum(case id when '10' then CreateTime else 0 end) as '10',
sum(case id when '11' then CreateTime else 0 end) as '11'
from tb
group by id
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 qianjin036a 的回复:]
行转列....
网上,论坛里相同的例子太多了.
[/Quote]
-晴天 2011-11-30
  • 打赏
  • 举报
回复
行转列....
网上,论坛里相同的例子太多了.
--小F-- 2011-11-30
  • 打赏
  • 举报
回复
declare @sql varchar(8000)
set @sql = 'select ''总量'' as [时间] '
select @sql = @sql + ' , max(case 时间 when ' + rtrim(时间) + ' then 总量 end) [' + rtrim(时间) + ']'
from (select DATEPART(hh, CreateTime) 时间,count(*) 数量 from tb group by DATEPART(hh, CreateTime)
)t
set @sql = @sql + ' from (select DATEPART(hh, CreateTime) 时间,count(*) 数量 from tb group by DATEPART(hh, CreateTime))t'
exec(@sql)
快溜 2011-11-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zengzhan 的回复:]
我 数据库 只有 id 和 CreateTime 这两个 字段 ,如何 作出 横排效果?
小时= DATEPART(hh, CreateTime) 也就是 统计 某时间段总量
[/Quote]
select DATEPART(hh, CreateTime) 时间,count(*) 数量 into ##tb 
from 你的表 group by DATEPART(hh, CreateTime)

declare @sql varchar(8000)
set @sql = 'select ''总量'' as [时间] '
select @sql = @sql + ' , max(case 时间 when ' + rtrim(时间) + ' then 总量 end) [' + rtrim(时间) + ']'
from ##tb
set @sql = @sql + ' from ##tb'
exec(@sql)

qqzeng-ip 2011-11-30
  • 打赏
  • 举报
回复
我 数据库 只有 id 和 CreateTime 这两个 字段 ,如何 作出 横排效果?
小时= DATEPART(hh, CreateTime) 也就是 统计 某时间段总量
黄_瓜 2011-11-30
  • 打赏
  • 举报
回复
--2000
declare @s nvarchar(4000)
select @s=isnull(@s+',','')+quotename([时间])+'=sum(case when [时间]='+quotename([时间],'''')+' then [总量] else 0 end)'
from [tb] group by [时间]
exec('select ''总量'' as [时间], '+@s+' from [tb] ')

/*
时间 9 10 11 12 13 14 15 16 17
---- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
总量 187 369 340 56 374 381 307 410 446

(1 行受影响)


*/
黄_瓜 2011-11-30
  • 打赏
  • 举报
回复
--2000
declare @s nvarchar(4000)
select @s=isnull(@s+',','')+quotename([时间])+'=sum(case when [时间]='+quotename([时间],'''')+' then [总量] else 0 end)'
from [tb] group by [时间]
exec('select '+@s+' from [tb]')

/*
9 10 11 12 13 14 15 16 17
----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
187 369 340 56 374 381 307 410 446

(1 行受影响)


*/
快溜 2011-11-30
  • 打赏
  • 举报
回复

create table tb(时间 int,总量 int)
insert into tb
select 9,187 union all
select 10,369 union all
select 11,340 union all
select 12,56 union all
select 13,374 union all
select 14,381

declare @sql varchar(8000)
set @sql = 'select ''总量'' as [时间] '
select @sql = @sql + ' , max(case 时间 when ' + rtrim(时间) + ' then 总量 end) [' + rtrim(时间) + ']'
from tb
set @sql = @sql + ' from tb'
exec(@sql)

/*
时间 9 10 11 12 13 14
---- ----------- ----------- ----------- ----------- ----------- -----------
总量 187 369 340 56 374 381
黄_瓜 2011-11-30
  • 打赏
  • 举报
回复
把max 改成 sum
黄_瓜 2011-11-30
  • 打赏
  • 举报
回复
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([时间] int,[总量] int)
insert [tb]
select 9,187 union all
select 10,369 union all
select 11,340 union all
select 12,56 union all
select 13,374 union all
select 14,381 union all
select 15,307 union all
select 16,410 union all
select 17,446

--select * from [tb]
declare @s nvarchar(4000)
select @s=isnull(@s+',','')+quotename([时间]) from [tb] group by[时间]
exec('select * from [tb] pivot (max([总量]) for [时间] in('+@s+'))b')
/*
9 10 11 12 13 14 15 16 17
----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
187 369 340 56 374 381 307 410 446

(1 行受影响)


*/

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧