SQL 中特定日期状态的动态数据透视表

Posted

技术标签:

【中文标题】SQL 中特定日期状态的动态数据透视表【英文标题】:Dynamic Pivot Table for status on particular days in SQL 【发布时间】:2011-11-04 17:55:16 【问题描述】:

我已经完成了其中的一部分,但试图将所有内容集中在一个东西上。从两个单独的输出表创建一个输出表。

tblMeetingTime one
-----------------
MeetingID   GroupID    MeetingTime
1           21          11/5/2011 8:30
2           21          11/9/2011 14:30
3           21          11/15/2011 8:30
4           23          11/5/2011 13:00
.           .           .
.           .           .

tblPeople
------------------------
GroupID     PersonID
21          3463  
21          3563
23          3245
.           .

tblRecordAttendance
--------------------------------
MeetingID    PeronID      Status
1            3463         A
1            3563         NULL
2            3463         N
2            3563         N
.            .            .

如果需要,我可以重做一些表格,但这就是引入原始数据的方式。我希望有类似的东西

 Person     11/5/2011 8:30 AM      11/9/2011 2:30 PM      ...      
 --------------------------------------------------- 
 3463        A                      N
 3563                               N
 .
 .
 .

我对如何在 C# 中实现这一点有一个很好的想法,但它需要大量的打开、重新提取和组织数据,并希望提出某种 SQL Pivot 来完成这一切,尤其是使用正在为每个组添加新的会议时间。

谢谢,

韦德

【问题讨论】:

为什么在 C# 中需要“拉取”数据?获取您需要的所有数据并进行处理。由于您没有计划显示的确切天数,因此最好还是在前端进行此处理。 我宁愿用 SQL 做所有的数据。出于性能原因等,我不想在 C# 中执行此操作...但如果我必须在网页上执行此操作,我可以。只是试图避免并通过存储过程创建单个拉动,或者拉动一个组以在他们参加会议时显示或更新状态。 【参考方案1】:

SQL Server 要求为 PIVOT 运算符预定义所有列值。在 SP 中执行此操作的唯一方法是首先查询所有列值,然后创建一个 PIVOT 命令作为字符串并将其传递给 sp_executesql 以获得答案。

我建议使用 SQL Server Reporting Services。您可以在仅客户端模式下使用 ReportViewer 控件,甚至不需要安装服务器组件。然后,您可以创建一个矩阵报告来计算您需要的内容。

http://msdn.microsoft.com/en-us/library/ms251671.aspx

不要让 MSDN 吓跑您。就像在您的计算机(和 Web 服务器)上安装控件一样简单;然后,Visual Studio 将有一个报表设计器插件,只要您打开 RDLC 文件,该插件就会打开。它还在“添加新...”菜单中添加了“报告”选项。

您也可以在 C# 中手动完成。您无需重新查询。无论您是利用 ReportViewer 控件还是自己动手,您只需将列表作为一大堆人员/会议行从过程中拉出。如果您使用的是 .NET 4,那么 LINQ to Objects 可以在构建 html 表时轻松使用纯 C# 进行处理。

【讨论】:

您好,报告服务不好,因为我必须在运行中做更多的事情。我正在使用 .NET 3.5 并且无法执行 LINQ,因此出于其他原因,我采用了一种邪恶的方式来动态生成表格和表格并以这种方式获取和存储数据。不是最好的,但它似乎正在工作。海量文件和读取,但异步方面足以应付不可预测的源数据。谢谢你的建议,韦德

以上是关于SQL 中特定日期状态的动态数据透视表的主要内容,如果未能解决你的问题,请参考以下文章

php sql中带有日期、变量类别和总和值的数据透视表

SQL 数据透视表每列总计

使用 VBA 将数据透视表设置为基于另一个字段的特定日期

SQL数据库中如何从A表自动更新数据到B表?

SQL 数据透视表动态

SQL Server 中的数据透视表查询