Динамическая сводная таблица для статуса в определенные дни в 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. добавлено для каждой группы.
Спасибо,
брод
1 ответ
SQL Server требует, чтобы все значения столбцов были предварительно определены для оператора PIVOT. Единственный способ сделать это в SP - это сначала запросить все значения столбца, затем создать команду PIVOT в виде строки и передать ее sp_executesql, чтобы получить ответ.
Я бы предложил использовать службы отчетов SQL Server. Вы можете использовать элемент управления ReportViewer в режиме только клиента и даже не требовать установки компонентов сервера. Затем вы можете создать матричный отчет, который рассчитает, что вам нужно.
http://msdn.microsoft.com/en-us/library/ms251671.aspx
Не позволяйте MSDN отпугнуть вас. Это на самом деле так же просто, как установить элемент управления на свой компьютер (и веб-сервер); Visual Studio будет иметь подключаемый модуль конструктора отчетов, который открывается всякий раз, когда вы открываете файл RDLC. Он также добавляет параметр "Отчет" в меню "Добавить новый...".
Вы также можете сделать это вручную в C#. Вам не нужно повторно запрашивать. Независимо от того, используете ли вы элемент управления ReportViewer или делаете это самостоятельно, вы просто извлекаете список из процедуры как большой стек строк о человеке / собрании. Если вы используете.NET 4, то LINQ to Objects сделает его простым для обработки на простом C# при создании HTML-таблицы.