SSRS 将多列中的多行合并为一行
SSRS combining multiple rows from multiple columns into one row
我们需要检查学生考试的要求(例如额外分配的时间 (A)、文字处理器 (B)、reader (C) 等)。目前 SQL 会输出这样的信息:
Student | Exam Requirements
---------------------------
1 | A
1 | B
2 | A
2 | B
2 | C
3 | B
4 | B
4 | C
5 | A
6 | D
7 | E
8 | F
我需要像这样在 SSRS 中显示它:
学生 |要求 A |要求 B |要求 C |其他要求
1 | Y | Y | - | -
2 | Y | Y | Y | -
3 | - | Y | - | -
4 | - | Y | Y | -
5 | Y | - | - | -
6 | - | - | - | D
7 | - | - | - | E
8 | - | - | - | F
目前,由于行组按学生分组,我的 table 仅在要求 A 的列中显示 'Y'。如果我按要求对其进行分组,那么它会创建尽可能多的行因为学生有要求。
谢谢,
罗布
使用条件聚合:
select
student,
coalesce(max(case when exam_requirements = 'A' then 'Y' end), '-') requirement_a,
coalesce(max(case when exam_requirements = 'B' then 'Y' end), '-') requirement_b,
coalesce(max(case when exam_requirements = 'C' then 'Y' end), '-') requirement_c,
coalesce(max(case when exam_requirements not in ('A', 'B', 'C') then exam_requirements end), '-') other_requirement
from mytable
group by student
我使用以下查询重新创建了数据集
DECLARE @t TABLE(Student int, Requirement varchar(10))
INSERT INTO @t VALUES
(1, 'A'),(1, 'B'),(2, 'A'),(2, 'B'),(2, 'C'),(3, 'B'),(4, 'B'),(4, 'C'),(5, 'A'),(6, 'D'),(7, 'E'),(8, 'F')
然后在报告中使用了这个数据集
SELECT
Student
, CASE WHEN Requirement IN ('A','B','C') THEN Requirement ELSE 'Other' END AS ExamRequirement
, CASE WHEN Requirement IN ('A','B','C') THEN 'Y' ELSE Requirement END AS reportvalue
FROM @t
这给出了以下输出
然后我在报告中添加了一个矩阵,按学生设置行组,按考试要求设置列组,并将 [数据] 设置为报告值。设计看起来像这样
最终输出如下所示
我们需要检查学生考试的要求(例如额外分配的时间 (A)、文字处理器 (B)、reader (C) 等)。目前 SQL 会输出这样的信息:
Student | Exam Requirements
---------------------------
1 | A
1 | B
2 | A
2 | B
2 | C
3 | B
4 | B
4 | C
5 | A
6 | D
7 | E
8 | F
我需要像这样在 SSRS 中显示它:
学生 |要求 A |要求 B |要求 C |其他要求
1 | Y | Y | - | -
2 | Y | Y | Y | -
3 | - | Y | - | -
4 | - | Y | Y | -
5 | Y | - | - | -
6 | - | - | - | D
7 | - | - | - | E
8 | - | - | - | F
目前,由于行组按学生分组,我的 table 仅在要求 A 的列中显示 'Y'。如果我按要求对其进行分组,那么它会创建尽可能多的行因为学生有要求。
谢谢, 罗布
使用条件聚合:
select
student,
coalesce(max(case when exam_requirements = 'A' then 'Y' end), '-') requirement_a,
coalesce(max(case when exam_requirements = 'B' then 'Y' end), '-') requirement_b,
coalesce(max(case when exam_requirements = 'C' then 'Y' end), '-') requirement_c,
coalesce(max(case when exam_requirements not in ('A', 'B', 'C') then exam_requirements end), '-') other_requirement
from mytable
group by student
我使用以下查询重新创建了数据集
DECLARE @t TABLE(Student int, Requirement varchar(10))
INSERT INTO @t VALUES
(1, 'A'),(1, 'B'),(2, 'A'),(2, 'B'),(2, 'C'),(3, 'B'),(4, 'B'),(4, 'C'),(5, 'A'),(6, 'D'),(7, 'E'),(8, 'F')
然后在报告中使用了这个数据集
SELECT
Student
, CASE WHEN Requirement IN ('A','B','C') THEN Requirement ELSE 'Other' END AS ExamRequirement
, CASE WHEN Requirement IN ('A','B','C') THEN 'Y' ELSE Requirement END AS reportvalue
FROM @t
这给出了以下输出
然后我在报告中添加了一个矩阵,按学生设置行组,按考试要求设置列组,并将 [数据] 设置为报告值。设计看起来像这样
最终输出如下所示