【问题标题】:SQL retrieve a "calendar" tableSQL 检索“日历”表
【发布时间】:2018-08-29 13:23:00
【问题描述】:

我有 3 张桌子:

  1. BK_Athleten 有很多列,但有 3 个有趣的列是:

    • FINCode:运动员注册号,主键
    • 姓名
    • 姓氏
  2. BK_Einheiten 有很多列,但有趣的 2 列是:

    • IDEinheit:训练会话的索引,主键
    • 数据:会议日期
  3. 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,

还有在枢轴子句中:

枢轴
(
计数(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 (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

枢轴
(
计数(IDPres) 对于第 3 天([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 个右列与 a) 会话的总和 2) 出席率取决于最后一行数据?

非常感谢。

【问题讨论】:

  • 您使用的是什么 DBMS? SQL 服务器?甲骨文? MySQL 还有什么?解决方案可能因您的平台而异。 SQL 在不同的供应商之间有许多变化。到目前为止,您还尝试过什么吗?通常在这里我们帮助修复错误,而不是提供整个功能。我们不是免费的外包服务。要回答您的确切问题,“是的”,几乎可以肯定实现它,除非您的 DBMS 非常有限。但不知何故,我怀疑你真的不只是想要“是”或“否”,你想要实际的解决方案?

标签: sql sql-server tsql calendar sql-server-2008-r2


【解决方案1】:

从最终选择查询中删除表名。

 CREATE VIEW dbo.view1
 AS
 SELECT FINCode, 

还有在枢轴子句中:

PIVOT  
(  
Count(IDPres) 

这应该可以解决您的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    • 2014-02-23
    • 1970-01-01
    相关资源
    最近更新 更多