sql - SQL 检索“日历”表
问题描述
我有 3 张桌子:
BK_Athleten
有很多列,但有 3 个有趣的列是:- FINCode:运动员注册号,主键
- 姓名
- 姓
BK_Einheiten
有很多列,但有趣的 2 列是:- IDEinheit:训练会话的索引,主键
- 基准:会议日期
BK_Anwesend
有 3 列是培训课程的登记册- IDPres:只是一个索引
- FINCode:是运动员的注册号
- IDEinheit:是培训课程的渐进指数
如何检索月度培训出勤表?将月份传递给函数我想检索一个表格,左侧有运动员姓名,顶部有所有月份的日期,交叉点是每个运动员和每天参加的训练次数(即使是 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 作为选择 FINCode,
在枢轴子句中还有:
PIVOT
(
计数(IDPres)
现在错误是“无效的列名'IDPres'”。尝试了所有更改,但没有成功。
更新 3
该视图现在正在工作!
CREATE VIEW dbo.view1 AS 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 (SELECT 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
我现在有两个问题:
1)如何根据一个月的天数使查询动态化?
2)我如何添加 2 个右列与 a)会话的总和 2)出勤率取决于最后一行数据?
非常感谢。
解决方案
从最终选择查询中删除表名。
CREATE VIEW dbo.view1
AS
SELECT FINCode,
在枢轴子句中还有:
PIVOT
(
Count(IDPres)
这应该可以解决您的错误。
推荐阅读
- java - 在 spring-jpa 中使用 JPQL 删除 2000 条记录的最佳方法
- machine-learning - 为自定义环境调整稳定的基线代理
- npm - 我需要实现一个功能以在角度应用程序中使用热敏打印机。我试过很遗憾没有成功
- r - Tinytex 无法安装缺少的 LaTeX 包,因为它已经安装了
- google-cloud-platform - GCP:谷歌云平台数据库全量备份
- xamarin.android - AlarmManager 并每 10 秒重复一次
- html - chrome忽略了Favicon位置
- php - 无效的运算符“$addToSet”
- mysql - MySQL从其他字段计算表达式
- angular - 区域选择传单地图 Angular 9