2011-11-04 54 views
1

我已经看到它的部分完成,但试图在一件事情中得到它。从两个独立的表中创建一个输出表。动态数据透视表在SQL中的特定日期的状态

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来完成这一切,特别是在为每个组添加新的MeetingTimes时。

感谢,

韦德

+0

为什么你需要在C#中使用“repull”数据来做到这一点?抓住你需要的所有数据并处理它。由于您计划显示的日期没有任何明确的天数,所以无论如何您最好在前端执行此处理。 –

+0

我宁愿做SQL中的所有数据。我不想在C#中执行性能原因等,但如果必须在网页上执行此操作,我可以。试图通过存储过程来避免和创建单个拉,或者拉出一个组来显示或更新他们参加会议时的状态。 –

回答

0

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#进行处理。

+0

嗨, 报告服务不好,因为我不得不在飞行中更多地做。我使用的是.NET 3.5,不能执行LINQ,所以由于其他原因,我采取了动态生成表格和表格并以这种方式获取和存储数据的恶意方式。不是最好的,但它似乎工作。大量的文件和读取,但异步方面对于不可预测的源数据来说足够好。 感谢您的意见, 韦德 –