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,所以由於其他原因,我採取了動態生成表格和表格並以這種方式獲取和存儲數據的惡意方式。不是最好的,但它似乎工作。大量的文件和讀取,但異步方面對於不可預測的源數據來說足夠好。 感謝您的意見, 韋德 –