У меня есть 3 таблицы:
BK_Athleten
со многими столбцами, но есть три интересных:
- FINCode: регистрационный номер спортсмена, первичный ключ
- Имя
- Фамилия
BK_Einheiten
со многими столбцами, но интересными являются 2:
- IDEinheit: индекс тренировки, первичный ключ
- Datum: дата сеанса
BK_Anwesend
с 3 колонками, которые являются регистром тренировочных сессий
- IDPres: просто индекс
- FINCode: регистрационный номер спортсмена
- IDEinheit: прогрессивный индекс тренировок
Как я могу получить таблицу посещаемости за месяц? Проходя месяц к функции я бы хотел
получить таблицу с именем спортсмена слева и всеми днями месяца вверху и на пересечении подсчета
посещенных сессий для каждого спортсмена и в день (даже дни с 0 сессиями должны отображаться в таблице).
Возможно ли достичь этого без скалярных запросов к базе данных для каждого дня и спортсмена?
UPDATE
Большое спасибо за предложения! Я использую SQL Server 2008 R2.
После многих часов попыток я застреваю со следующей ошибкой:
Префикс столбца 'BK_Anwesend' не совпадает с именем таблицы или псевдонимом, используемым в запросе.
Не удалось связать идентификатор из нескольких частей «BK_Athleten.FINCode».
Вот мой код:
CREATE VIEW dbo.view1
AS
SELECT BK_Athleten.FINCode,
[1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16],
[17], [18], [19], [20], [21], [22], [23], [24], [25], [26], [27], [28], [29], [30], [31]
FROM
(SELECT BK_Athleten.FINCode, RIGHT(BK_Einheiten.Datum, 2) AS Day
FROM BK_Anwesend INNER JOIN
BK_Athleten ON BK_Anwesend.FINCode = BK_Athleten.FINCode INNER JOIN
BK_Einheiten ON BK_Anwesend.IDEinheit = BK_Einheiten.IDEinheit
GROUP BY BK_Athleten.FINCode, BK_Einheiten.Datum) AS SourceTable
PIVOT
(
Count(BK_Anwesend.IDPres)
FOR Day IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15],
[16], [17], [18], [19], [20], [21], [22], [23], [24], [25], [26], [27], [28], [29], [30], [31] )
) AS PivotTable;
ОБНОВЛЕНИЕ 2
После исправления CBS
CREATE VIEW dbo.view1
КАК
ВЫБЕРИТЕ FINCode,
, а также в главном предложении:
PIVOT
(
Количество (IDPres)
теперь ошибка «Недопустимое имя столбца IDPres». Пробовал все изменения, но безуспешно.
ОБНОВЛЕНИЕ 3
Вид теперь работает!
СОЗДАТЬ ВИД dbo.view1
КАК
ВЫБЕРИТЕ FINCode, [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12] , [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23], [24], [ 25], [26], [27], [28], [29], [30], [31]
FROM (ВЫБЕРИТЕ BK_Athleten.FINCode, RIGHT (BK_Einheiten.Datum, 2) AS Day, BK_Anwesend.IDPres
FROM BK_Anwesend INNER JOIN
BK_Athleten ON BK_Anwesend.FINCode = BK_Athleten.FINCode INNER JOIN
BK_Einheiten ON BK_Anwesend.IDEinheit = BK_Einheiten.IDEinheit) AS PVT
PIVOT
(
Count (IDPres)
FOR Day IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12] ], [13], [14], [15],
[16], [17], [18], [19], [20], [21], [22], [23], [24], [25], [26], [27], [28 ], [29], [30], [31])
) КАК PRT
У меня сейчас 2 вопроса:
1) Как сделать запрос динамическим в зависимости от количества дней в месяце?
2) Как я могу добавить 2 правильных столбца с: а) суммой сеансов 2) процентом посещаемости в зависимости от последней строки данных?
Большое спасибо.