【发布时间】:2019-05-19 13:51:49
【问题描述】:
我有一个包含 studentid、atDate 和 status 列的出勤表,它只保存 缺席 学生的状态。没有身份的学生在出勤记录日期被视为在场。 我需要显示学生的出勤情况。以下是我的查询,它成功生成了所选月份的出勤记录。问题是我无法在所选月份动态生成天数,因为每个月都有不同的天数。另外我想将星期日的状态显示为“S”
SELECT fkStudentID, [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
fkStudentID, Status, DAY(Dated) as [DayValue]
From tblAttendance Where Month(Dated) = Month(@Dated) and Year(Dated) = Year(@Dated) and fkClassID = 1
) AS studAttd
PIVOT
(
MAX(Status)
FOR [DayValue] 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 pvt
我想要的输出,如果值为空,则应将其替换为状态“P”,如果某一天是星期日,则应将其替换为状态“S”,还应根据所选月份日期生成天数。
【问题讨论】:
-
您的问题是什么?你已经说了你想要什么,但没有问任何问题。对于你想要做什么,看看
ISNULL和CASE表达式。 -
@Ali Kazmi 这不能通过动态sql来完成吗?
-
@Tony Mathew 任何解决方案无论是动态的还是非动态的都可以提供帮助:)
标签: sql-server pivot