SSRS объединяет несколько строк из нескольких столбцов в одну строку - PullRequest
0 голосов
/ 04 марта 2020

Нам необходимо проверить требования к экзаменам студентов (например, выделенное дополнительное время (A), текстовый процессор (B), читатель (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 следующим образом:

Student | Требование А | Требование Б | Требование C | Другое требование

   1    |       Y       |       Y       |       -       |       -        
   2    |       Y       |       Y       |       Y       |       -        
   3    |       -       |       Y       |       -       |       -        
   4    |       -       |       Y       |       Y       |       -       
   5    |       Y       |       -       |       -       |       -       
   6    |       -       |       -       |       -       |       D       
   7    |       -       |       -       |       -       |       E       
   8    |       -       |       -       |       -       |       F        

В настоящее время, так как группа строк сгруппирована на Студента, в моей таблице только «Y» отображается в столбце для требования А. Если я сгруппирую его по требованию, то создается столько строк как у студента есть требования.

Спасибо, Роб

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Использовать условное агрегирование:

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
0 голосов
/ 04 марта 2020

Я воссоздал набор данных со следующим запросом

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

Это дает следующий вывод

enter image description here

Затем я добавил матрицу в отчет, установил группу строк по студенту и группу столбцов по ExamRequirement, а [данные] - reportValue. Дизайн выглядит следующим образом

enter image description here

Окончательный результат выглядит следующим образом

enter image description here

...