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

这给出了以下输出

然后我在报告中添加了一个矩阵,按学生设置行组,按考试要求设置列组,并将 [数据] 设置为报告值。设计看起来像这样

最终输出如下所示