学年 | 一月 | 二月 | 三月 | 四月 | 五月 | 六月 | 七月 | 八月 |
---|---|---|---|---|---|---|---|---|
2022-2023 | 5 | 9 | 4 | 6 | 3 | 2 | 1 | 8 |
2023-2024 | 4 | 3 | 7 | 6 | 4 | 1 | 1 | 2 |
2024-2025 | 3 | 11 | 5 | 4 | 4 | 2 | 7 | 5 |
我在 SSRS 中使用了一个矩阵,其中学年作为行,月份作为数据,计数(学生)作为列。
参考 SQL Server 2019 和 2022 SSRS
我有一个选择查询:
Select schoolname, datename(month, date_01) as month, student name, schoolyear
from table 1 q
join
table 2
on
q.(column)=w.(column)
where schoolyear in ('2022-2023','2023-2024','2024-2025')
group by .......
order by .....
date_01 的格式为 yyyy/mm/dd,我将其转换为月份。
我使用学校名称作为参数,根据我的数据更改选择学校。
显示的数字是不同月份注册的学生姓名的统计。
现在ABC学校只有一月到八月的数据,之后就没有学生注册了。基本上所有学校都有变化,所以没有固定模式。
学年 | 一月 | 二月 | 三月 | 四月 | 五月 | 六月 | 七月 | 八月 | 九月 | 十月 | 十一月 | 十二月 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2022-2023 | 5 | 9 | 4 | 6 | 3 | 2 | 1 | 8 | 0 | 0 | 0 | 0 |
2023-2024 | 4 | 3 | 7 | 6 | 4 | 1 | 1 | 2 | 0 | 0 | 0 | 0 |
2024-2025 | 3 | 11 | 5 | 4 | 4 | 2 | 7 | 5 | 0 | 0 | 0 | 0 |
我不记得如何做到这一点。对于拥有所有月份数据的学校来说是可以的,但仅拥有几个月数据的学校很难将其他月份的数据显示为零,因为它们没有数据。我可以在 SQL Server 脚本或 SSRS 中做些什么吗?
一种可接受的方法是创建一个日历表作为基表并相应地左连接数据。下面的代码片段实现了同样的效果。
DECLARE @StartYear INT = 2022
DECLARE @EndYear INT = 2024
;WITH R1(N) AS (SELECT 1 FROM (VALUES (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))dt(n)),
R2(N) AS (SELECT 1 FROM R1 a, R1 b),
R3(N) AS (SELECT 1 FROM R2 a, R2 b),
Tally(Number) AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM R3)
SELECT
CASE WHEN (Number % 12) = 0 THEN 12 ELSE (Number % 12) END AS [Month],
ROW_NUMBER() OVER (PARTITION BY Number % 12 ORDER BY Number) + @StartYear -1 AS StartYear,
ROW_NUMBER() OVER (PARTITION BY Number % 12 ORDER BY Number) + @StartYear AS EndYear
FROM
Tally
ORDER BY Number
Select schoolname, datename(month, date_01) as month, student name, schoolyear
from
Tally cal
left join
table 1 q on datepart(month, date_01) = cal.[Month] and datepart(year, date_01) cal.[startyear]
left join
table 2
on
q.(column)=w.(column)
where cal.schoolyear in ('2022-2023','2023-2024','2024-2025')
group by .......
order by .....