大神出马吧,如何生成这样不规整的表格

Adam_09 2014-10-26 12:22:51
在SQL SERVER中表的格式是这样的

表的意思是某一个省份的某性别、年龄、身高、体重的人的平均锻炼次数和时长
现在我想统计的是把相同 性别 年龄 身高 体重 但不同省份的放在一起(相当于同一性别、年龄、身高、体重的各省份之间的对比)
随后我想要的是这样的EXCEL表

不行至少得这样



我从数据库中提取表到datatable,但是接下来怎么办就不知道了,特别是合并单元格的问题
所以请大神出马
...全文
513 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
fcqm8888 2014-11-16
  • 打赏
  • 举报
回复
不参加EXCEL培训班,看来是一时半会儿难掌握的,哪里有培训班呢?
auos 2014-11-16
  • 打赏
  • 举报
回复
额,我做的都是读出数据然后自己写到表格中,我用的sourcegrid,效果还不错。
smthgdin_020 2014-10-28
  • 打赏
  • 举报
回复
当然,你也可以再后台自己去定义excel表格,可以自己控制列的合并居中什么的,有了这个模板,就可以往里面添数据,最后再response输出。
专注or全面 2014-10-28
  • 打赏
  • 举报
回复
数据库中可以用sql直接实现,sqlserver或者oracle中都有相关的函数,mysql中不懂 给你我的笔记参考
create table MeterialInfo
(
	id int identity(1,1),
	MeterialName varchar(50),
	InStoreDate datetime,
	Weight decimal(18,3),
	Remark varchar(200)
)

select 100*RAND()

insert into MeterialInfo values ('AAAAA',GETDATE(),100*RAND(),NEWID())
waitfor delay '00:00:01:01'
insert into MeterialInfo values ('BBBBB',GETDATE(),100*RAND(),NEWID())
waitfor delay '00:00:01:01'
insert into MeterialInfo values ('AAAAA',GETDATE(),100*RAND(),NEWID())
waitfor delay '00:00:01:01'
insert into MeterialInfo values ('BBBBB',GETDATE(),100*RAND(),NEWID())

select 
CASE WHEN GROUPING(MeterialName) = 1 
THEN 'ALL' ELSE MeterialName END 
AS MeterialName,
SUM(Weight) from MeterialInfo
group by MeterialName  WITH CUBE 



--MeterialName	(无列名)
--AAAAA	        217.411
--BBBBB	        274.565
--ALL	              491.976




select 
CASE WHEN GROUPING(MeterialName) = 1 
THEN 'ALL' ELSE MeterialName END 
AS MeterialName,InStoreDate,
SUM(Weight) from MeterialInfo
group by MeterialName ,InStoreDate  WITH ROLLUP

MeterialName	InStoreDate	(无列名)
AAAAA	2012-12-12 11:16:43.957	76.909
AAAAA	2012-12-12 11:16:45.957	60.072
AAAAA	2012-12-12 11:16:47.707	53.246
AAAAA	2012-12-12 11:16:49.707	27.184
AAAAA	2012-12-12 11:32:53.433	89.429
AAAAA	2012-12-12 11:32:53.620	21.208
AAAAA	2012-12-12 11:32:53.637	90.963
AAAAA	NULL	                  419.011
BBBBB	2012-12-12 11:16:44.957	68.751
BBBBB	2012-12-12 11:16:46.957	33.855
BBBBB	2012-12-12 11:16:48.707	77.566
BBBBB	2012-12-12 11:16:50.720	94.393
BBBBB	2012-12-12 11:32:53.433	96.330
BBBBB	2012-12-12 11:32:53.620	72.308
BBBBB	2012-12-12 11:32:53.637	43.261
BBBBB	NULL	                  486.464
ALL	NULL	                  905.475
allen0118 2014-10-28
  • 打赏
  • 举报
回复

使用rdlc,用分组把数据分好,然后直接导出Excel就有这种格式,如下图:
Adam_09 2014-10-27
  • 打赏
  • 举报
回复
引用 4 楼 Z65443344 的回复:
select的时候,order by 性别,年龄,身高,体重,相同的就都挨着了 然后循环一下处理就行了 话说,你求总的锻炼次数和时长,这没什么意义
具体怎么循环处理呢。。。。。。
Adam_09 2014-10-27
  • 打赏
  • 举报
回复
[quote=引用 5 楼 Z65443344 的回复:] 学过什么叫"加权平均数"吗? 人家本来就是个平均数,而不是3个个人 你把平均数这样直接相加,根本是完全无意义的行为 好比江苏平均锻炼1次,每次1小时,统计了30000个人得出的结论 而云南平均锻炼2次,1小时,只统计了3个人 你把30000个人的平均值跟3个人的平均值相加,最后是要除以2吗??[/quote 大神,原表不是这个,我只是那这个做个案例,方法是一样的 见笑了。。。。
smthgdin_020 2014-10-27
  • 打赏
  • 举报
回复
一个老的思路: 1.先用excel设置布局,布局里需要赋值的地方记得弄成标签比如说{0},{2}; 2.将上一步的另存为html; 3.后台代码获取值之后,替换掉标签内容。
jun471537173 2014-10-27
  • 打赏
  • 举报
回复
百度一下“DataGridView合并单元格” 或者用报表也可以实现,设置下合并相同内容单元格就可以了
於黾 2014-10-27
  • 打赏
  • 举报
回复
学过什么叫"加权平均数"吗? 人家本来就是个平均数,而不是3个个人 你把平均数这样直接相加,根本是完全无意义的行为 好比江苏平均锻炼1次,每次1小时,统计了30000个人得出的结论 而云南平均锻炼2次,1小时,只统计了3个人 你把30000个人的平均值跟3个人的平均值相加,最后是要除以2吗??
於黾 2014-10-27
  • 打赏
  • 举报
回复
select的时候,order by 性别,年龄,身高,体重,相同的就都挨着了 然后循环一下处理就行了 话说,你求总的锻炼次数和时长,这没什么意义
truediego 2014-10-27
  • 打赏
  • 举报
回复
第一种效果: 看你输出Excel用的是什么方法或者插件,然后合并单元格就行了 第二种效果: 检索的sql用 group by rollup,就可以有小计行了
pinqing 2014-10-27
  • 打赏
  • 举报
回复
npoi 这个组件生成Excel很强,里面应该有合并单元格的方法
於黾 2014-10-27
  • 打赏
  • 举报
回复
引用 8 楼 Adam_09 的回复:
[quote=引用 4 楼 Z65443344 的回复:] select的时候,order by 性别,年龄,身高,体重,相同的就都挨着了 然后循环一下处理就行了 话说,你求总的锻炼次数和时长,这没什么意义
具体怎么循环处理呢。。。。。。[/quote] 按行循环,再按列循环,双重for循环 先判断这一行和上一行是否相同,相同就做累加 不相同就将上面相同的几行合并单元格,并把累计数量清空
netwar 2014-10-26
  • 打赏
  • 举报
回复
生成表格的时候,ROWSPAN ,COLSPAN
Adam_09 2014-10-26
  • 打赏
  • 举报
回复
求不沉啊。。。。
Adam_09 2014-10-26
  • 打赏
  • 举报
回复
引用 2 楼 netwar 的回复:
生成表格的时候,ROWSPAN ,COLSPAN
能具体点么?不怎么懂
下载代码方式:https://pan.quark.cn/s/dd3561eca308 在软件开发领域,面向对象编程(OOP)是一种普遍采纳的结构化方法,它使得开发者能够借助模拟现实环境中的实体和关系来构建软件系统。在本案例中,我们观察到的是一个关于借助抽象类来执行不同几何图形面积求解的实践应用。现在,让我们详细分析这一议题。 标题 "应用抽象类计算面积" 清晰地表明我们将要讨论一个抽象类,此类设定了一个用于测量图形面积的标准函数,但并未提供实际的执行过程。抽象类在诸如C#或Java等编程语言中通常借助`abstract`修饰符进行声明,它们无法直接创建对象实例,仅能作为其他类的基础模板。 描述部分提及的"图形界面应用"暗示这是一个基于视觉用户界面(GUI)的系统,可能运用了.NET Framework的Windows Forms或WPF技术,或者是Java平台的Swing或JavaFX框架。在这样环境下,用户能够通过视觉元素与这些几何体进行互动,例如输入相关尺寸并观看到计算得出的面积值。 抽象类“几何体”内嵌了“计算面积”这一抽象函数。在代码层面,这可以被表述为: ```csharp public abstract class GeometricShape { public abstract double CalculateArea(); } ``` 随后,有三个派生类:圆(Circle)、矩形(Rectangle)和三角形(Triangle),它们各自提供了这个抽象函数的具体实现。比如,圆的面积是通过π乘以半径的平方得到的,矩形的面积是长和宽的乘积,而三角形的面积可能是底乘以高再除以2的结果。这些类将提供具体实现来计算它们各自的面积: ```csharp p...
内容概要:本文系统研究了移相控制全桥LLC谐振变换器的工作特性,深入分析其在不同工作模式下的运行机理与性能表现,重点探讨了软开关实现、高效率能量转换及宽范围电压调节等关键技术优势。通过Simulink搭建精确的仿真模型,对谐振腔参数、开关频率、电压增益、系统效率等关键指标进行仿真分析,验证了理论设计的正确性。同时,详细研究了移相控制策略对系统动态响应、稳定性和轻载/重载工况适应性的影响,揭示了控制参数与电路参数之间的耦合关系,为高频高效电源设计提供了理论依据和实践指导。; 适合人群:具备电力电子技术、模拟电路及自动控制理论基础,从事开关电源、新能源变换器、电动汽车充电模块或高频电源系统研发的工程师及高校研究生。; 使用场景及目标:①掌握全桥LLC谐振变换器的拓扑结构、工作原理与关键参数设计方法;②理解移相控制在实现零电压开通(ZVS)和零电流关断(ZCS)中的作用机制;③通过Simulink仿真掌握变换器建模、参数优化与性能评估流程,服务于实际产品开发与学术课题研究。; 阅读建议:建议读者结合提供的Simulink仿真模型进行同步操作,重点关注谐振网络(Lr, Lm, Cr)参数与移相角之间的匹配设计,深入理解软开关条件的形成过程,并通过调整负载和输入电压进行多工况仿真,以全面掌握系统动态特性。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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