我有3张桌子:
BK_Athleten
包含许多列,但3个有趣的列是:
BK_Einheiten
包含许多列,但有趣的2列是:
BK_Anwesend
(三列)是培训课程的记录
如何获取每月培训出勤表?将月份传递给我想要的功能 检索一个表格,其运动员姓名在左侧,所有月日在顶部,在交叉点计数 每位运动员每天的出席次数(即使该表格中包含0次会话的天数也应显示在表格中)。
是否可以做到这一点而无需每天每名运动员每天进行标量查询?
更新
非常感谢您的建议!我正在使用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修正后
创建视图dbo.view1 如 SELECT FINCode,
以及在数据透视子句中:
PIVOT
(
Count(IDPres)
现在错误是“无效的列名'IDPres'”。尝试了所有更改,但没有成功。
更新3
该视图现在正在工作!
创建视图dbo.view1
如
SELECT 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
来自BK_Anwesend内部联接
BK_Athleten ON BK_Anwesend.FINCode = BK_Athleten.FINCode INNER JOIN
BK_Einheiten ON BK_Anwesend.IDEinheit = BK_Einheiten.IDEinheit)AS PVT
PIVOT
(
计数(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 PRT
我现在有2个问题:
1)如何根据月中的天数使查询动态化?
2)如何在右边添加2列,其中a)会话总数之和2)出席率取决于最后一行数据?
非常感谢。
答案 0 :(得分:0)
从最终选择查询中删除表名称。
CREATE VIEW dbo.view1
AS
SELECT FINCode,
以及在数据透视子句中:
PIVOT
(
Count(IDPres)
这应该可以解决您的错误。