Нет необходимости поворачивать эти данные в SQL. Службы Reporting Services могут сделать это за вас.
Создайте новый отчет и добавьте новый набор данных; запрос к набору данных должен возвращать результаты в соответствии с данными вашего примера.
Я использовал следующий запрос для репликации вашего data
DECLARE @t TABLE(CustomerID int, Reference int, [date] date, Product varchar(10), Quantity int)
INSERT INTO @t VALUES
(1,1,'2019-01-01', 'Glass', 6),
(1,1,'2019-01-01', 'Plate', 6),
(1,2,'2019-01-02', 'Glass', 1),
(2,3,'2019-01-02', 'Fork', 3)
SELECT * FROM @t
Добавить матричный элемент управления в отчет.
Перетащите поле «Клиент» с панели данных отчета в местозаполнитель «строк» в матрице, затем перетащите поле «Товар» в местозаполнитель «Столбцы» и, наконец, перетащите Количество в местозаполнитель «Данные».
Дизайн отчета будет выглядеть примерно так (еще не закончен ...)
Дважды щелкните RowGroup (в моем примере это CustomerID) под основным дизайном панель и установите группировку по CustomerID (который уже должен быть там), Reference и Date, чтобы он выглядел следующим образом ...
next right щелкните текстовое поле CustomerID в своей матрице и выберите «Вставить столбец => Внутри группы - справа». Повторите это, чтобы добавить еще один столбец.
В двух новых столбцах щелкните раскрывающийся список и выберите поля ссылки и даты. Если ваше поле ссылки равно цифре c, SSRS добавит его как SUM (ссылка). В этом случае щелкните правой кнопкой мыши текстовое поле, выберите «выражение» и измените его на просто =Fields!Reference.Value
Наконец, щелкните текстовое поле даты в матрице и установите для его свойства формата значение dd/MM/yyyy
Окончательный дизайн должен выглядеть следующим образом (после форматирования строки заголовка)
Когда мы запускаем отчет, мы получаем это ..
Единственное отличие - это порядок сортировки по столбцам, но вы можете настроить его в свойствах группы столбцов.
По мере добавления новой даты, продуктов и c матрица будет корректироваться соответствующим образом.