我想把数据库中的数据按图一类似的格式显示出来,但数据库的数据是图二的格式,怎么实现,C#,winform的
图一我要显示的效果,不用中间的所属地区成都市这几个字,然后上面的日期,下面是对应站点的pr1数值我用datagridview显示数据,图二,数据库中的数据格式,请问怎么实...
图一我要显示的效果,不用中间的所属地区成都市这几个字,然后上面的日期,下面是对应站点的pr1数值
我用datagridview显示数据,
图二,数据库中的数据格式,请问怎么实现这个功能,数据库是sql server 2008的,其中st是smalldatetime类型,zhanming是nvarchar类型,pr1是float类型,求具体代码,非常感谢
,这是界面上的,要根据所选的时间范围和站点名称显示对应的数据,求解答,谢谢啦 展开
我用datagridview显示数据,
图二,数据库中的数据格式,请问怎么实现这个功能,数据库是sql server 2008的,其中st是smalldatetime类型,zhanming是nvarchar类型,pr1是float类型,求具体代码,非常感谢
,这是界面上的,要根据所选的时间范围和站点名称显示对应的数据,求解答,谢谢啦 展开
展开全部
使用行列转换 pivot
create table #CityTest
(
area nvarchar(200),
st smalldatetime,
pr1 float
)
insert into #CityTest
( area, st, pr1 )
select N'都江堰','2012-10-13 18:00:00',23.9
union
select N'都江堰','2012-10-14 18:00:00',21.9
union
select N'小溪坝','2012-10-13 21:00:00',6.7
union
select N'秀山','2012-10-13 18:00:00',3
union
select N'青龙镇','2012-10-14 23:00:00',2.9
--查询开始
--创建一个临时表
if object_id('tempdb..#tempArea') is not null drop table #tempArea
select area,convert(nvarchar(2),datepart(month,st))+'/'+convert(nvarchar(2),datepart(dd,st)) as st,pr1
into #tempArea
from #CityTest
order by st
declare @dateStr nvarchar(max)
select @dateStr=isnull(@dateStr+',','')+'['+s.st+']'
from(
select distinct st
from #tempArea where len(st)>0
) s
exec('select * from
#tempArea
pivot
(
max(pr1) for st in ('+@dateStr+')
)b')
不过在程序中操作要方便一些
create table #CityTest
(
area nvarchar(200),
st smalldatetime,
pr1 float
)
insert into #CityTest
( area, st, pr1 )
select N'都江堰','2012-10-13 18:00:00',23.9
union
select N'都江堰','2012-10-14 18:00:00',21.9
union
select N'小溪坝','2012-10-13 21:00:00',6.7
union
select N'秀山','2012-10-13 18:00:00',3
union
select N'青龙镇','2012-10-14 23:00:00',2.9
--查询开始
--创建一个临时表
if object_id('tempdb..#tempArea') is not null drop table #tempArea
select area,convert(nvarchar(2),datepart(month,st))+'/'+convert(nvarchar(2),datepart(dd,st)) as st,pr1
into #tempArea
from #CityTest
order by st
declare @dateStr nvarchar(max)
select @dateStr=isnull(@dateStr+',','')+'['+s.st+']'
from(
select distinct st
from #tempArea where len(st)>0
) s
exec('select * from
#tempArea
pivot
(
max(pr1) for st in ('+@dateStr+')
)b')
不过在程序中操作要方便一些
追问
高手呀,程序中怎么操作呢,求具体代码,我的程序里,时间st是变量,就是根据两个时间控件选择查询st的范围,望您解答
展开全部
给你个思路:
在程序中用DATATABLE做行列转换。只在数据到了程序中,那想怎么变就怎么变。
在程序中用DATATABLE做行列转换。只在数据到了程序中,那想怎么变就怎么变。
追问
能写个具体代码吗,我是初学者,现在着急用,谢谢啦
追答
把数据先装入datatable A。然后再用另一个datatable B作为结果。
然后在B中先把行列手工写上去,之后对B的行和列用二个循环来定位每个一单元格,再将每个单元格中行和列作为条件(比如 都江堰、6/24号)再去datatable A中查找。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询