日期:2014-05-18  浏览次数:20414 次

关于DataGrid显示列的问题~!
SQL数据表

字段→ 项目ID 月份 项目值
数据→ 1 1月
  1 2月
  1 3月
  1 4月
  1 5月
  1 6月
  1 7月
  1 8月
  1 9月
  1 10月
  1 11月
  1 12月
  2 1月
  2 2月
  2 3月
  2 4月
  1 5月
  ……
表中数据大概就这样。
现在希望把月份这个字段的数据做为列。绑定到DataGrid.
显示成这样
  项目名 一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月
  1
  2
  3
  4
  ……

列是从1月到12月都做为\。。
现在的问题是,一个项目ID对应12条记录,所以有很多个1月12月...
不知道咋办...
 望高手帮忙解决下。 ...在线等...~! 急救....


------解决方案--------------------
手动建立12个月份的列
然后在数据绑定时检索项目ID和对应的月份成立的项目值
------解决方案--------------------
最好先用sql实现,再连接数据。 用视图或存储过程比较方便
------解决方案--------------------
这是一个明显的行转列的SQL题目。。
可以如下:
SQL code




create table kkk(项目id int,月份 varchar(10),项目值 int)
insert into kkk select 1,'1月',1
insert into kkk select 1,'2月',2
insert into kkk select 1,'3月',3
insert into kkk select 1,'4月',4
insert into kkk select 1,'5月',5
insert into kkk select 1,'6月',6
insert into kkk select 1,'7月',7
insert into kkk select 1,'8月',8
insert into kkk select 1,'9月',9
insert into kkk select 1,'10月',10
insert into kkk select 1,'11月',11
insert into kkk select 1,'12月',12
insert into kkk select 2,'1月',21
insert into kkk select 2,'2月',22
insert into kkk select 2,'3月',23
insert into kkk select 2,'4月',24
insert into kkk select 2,'5月',25
insert into kkk select 2,'6月',26
insert into kkk select 2,'7月',27
insert into kkk select 2,'8月',28
insert into kkk select 2,'9月',29
insert into kkk select 2,'10月',30
insert into kkk select 2,'11月',31
insert into kkk select 2,'12月',32

创建存储过程:
create proc wsaa
as
declare @sql varchar(8000)
set @sql='select  项目id'
select @sql=@sql+',['+月份+']=sum(case 月份 when '''+ 月份 + ''' then 项目值 else 0 end)' from kkk group by 月份 
print @sql
set @sql=@sql+' from kkk group by 项目id '
exec(@sql)

调用存储过程
exec wsaa