@2021-07-08用jqGrid 插件动态展示Table 列 echarts生成图表,并导出为excel的过程
欢迎来到一只老菜鸟
你好! 这是你第一次写文章,项目所用技术都是老技术,此前没有写文章的习惯,这也是从业几年来首次编写,望大家多多指教,互相观摩学习
本次项目为c#语言编写,本人也只干了几年的c#,技术方面请各位大佬指导。
问题描述:需要将日期、总数、合格数、良率 列转行 ,生成一个月度统计表,上面是数据,下面是数据形成的日趋势图 合并导出到excel 要求效果如下
这是整理后的原始数据
心路历程就此别过
直接上 sql 代码
--生成补全日期行
select dateadd(DAY,number,'2020-6-1 00:00') as dt from master.dbo.spt_values where type ='P'and number <=DATEDIFF(DAY, '2020-6-1 00:00', '2020-7-1 00:00')
--变成具体的日期
select @tdd='<'+STUFF((select dateadd(DAY,number,@strDate) as dt from master.dbo.spt_values where type ='P'and number <=DATEDIFF(DAY, @strDate, @enddate) for xml path('')),1,1,'')
select @tdd = REPLACE(@tdd,'<dt>','[')
select @tdd = REPLACE(@tdd,'</dt>','],')
--去除 T00:00:00
select @tdd = REPLACE(@tdd,'T00:00:00','')
--关键 这里将日期动态化,日期转列 (, * 就是日期, '' as 日期 只是为了拼凑需要导出的格式) ,有多列需转,直接 UNION (应该有更好的办法,希望大家多多留言)
select '' as 日期, '' 合计, * from (
select ntime,
sum(GoodBoard) 合格数
from tt_statall_info where ntime between '2021-6-1' and '2021-7-1'
group by ntime ) V
PIVOT (sum(合格数) for V.ntime in ([2021-06-01],[2021-06-02],[2021-06-03],[2021-06-04],[2021-06-05],[2021-06-06],[2021-06-07],[2021-06-08],[2021-06-09],[2021-06-10],[2021-06-11],[2021-06-12],[2021-06-13],[2021-06-14],[2021-06-15],[2021-06-16],[2021-06-17],[2021-06-18],[2021-06-19],[2021-06-20],[2021-06-21],[2021-06-22],[2021-06-23],[2021-06-24],[2021-06-25],[2021-06-26],[2021-06-27],[2021-06-28],[2021-06-29],[2021-06-30],[2021-07-01] )) as T
--总的实现
create procedure pro_X
@strDate varchar(200),@enddate varchar(200)
as
begin
declare @strsql varchar(500);
declare @tdd varchar(8000);
declare @tee varchar(8000);
set @strsql=N' ntime between '''+@strDate +''' and ''' +@enddate+'''';
select @tdd='<'+STUFF((select dateadd(DAY,number,@strDate) as dt from master.dbo.spt_values where type ='P'and number <=DATEDIFF(DAY, @strDate, @enddate) for xml path('')),1,1,'')
select @tdd = REPLACE(@tdd,'<dt>','[')
select @tdd = REPLACE(@tdd,'</dt>','],')
select @tdd = REPLACE(@tdd,'T00:00:00','')
select @tdd = Left(@tdd,LEN(@tdd)-1)
print @tdd
select @tee =' select '''' as 日期, '''' 合计, * from (
select ntime,sum(GoodBoard) 合格数 from tablX where '+@strsql+'
group by ntime ) V
PIVOT (sum(合格数) for V.ntime in ('+@tdd+' )) as T ';
--有多列需要转的话直接UNION
exec ( @tee)
end
--执行,这里代码只转了行
exec pro_ETDaily '2021-6-1','2021-7-1'
效果图
##数据抽取已完成,干前端
关键代码贴出在这里插入代码片
/前端html
<div class="ibox-content">
<div class="jqGrid_wrapper" id ="jqGrid_wrapper">
<table id="table_list_1">
</table>
<div id="pager_list_1">
</div>
</