Как поворачиваться с колонками в SQL SSRS - PullRequest
0 голосов
/ 10 февраля 2020

Знаете ли вы, если в моем скрипте отсутствует что-то дополнительное, я пытаюсь повернуть таблицу "Pay_Details" и установить месяц за месяцем в строках столбцов с годами в строках. Я попробовал следующее, и мой код скрипта был опубликован.

Я получаю следующую ошибку: Сообщение 156, Уровень 15, Состояние 1, Строка 15 Неверный синтаксис рядом с ключевым словом «SELECT». Сообщение 102, уровень 15, состояние 1, строка 22 Неверный синтаксис рядом с ')'.

Мой вывод должен выглядеть следующим образом:

Year     January     February    March
2019     150         120         230
2018     100         200         300
2017     90          110         120

[Код сценария]:

SELECT Server,
    DATEPART(year, date) [year], 
    DATEPART(quarter, date) [quarter], 
    DATEPART(month, date) [month], 
    DATEPART(day, date) [day],
    Payee,
    Amount

FROM   [dbo].[Pay_Details]

    (SELECT    DATEPART(year, date) [year], 
   DATEPART(quarter, date) [quarter], 
   DATEPART(month, date) [month], 
   DATEPART(day, date) [day],
   Payee,
   Amount

    ) p PIVOT ( MAX([Amount])
                FOR ColName IN ( DATEPART(year, date) [year], 
   DATEPART(quarter, date) [quarter], 
   DATEPART(month, date) [month], 
   DATEPART(day, date) [day],
   Payee,
   Amount

) ) AS pvt
ORDER BY [year] DESC, 
         [quarter], 
         [month], 
         [day]

1 Ответ

0 голосов
/ 10 февраля 2020

В сводной области, в которой вы используете псевдонимы, вам нужно использовать литералы. Это означает, что вы либо

a. Необходимо заранее знать названия нужных вам столбцов (маловероятно, что данные изменятся)

b. создайте сводную инструкцию, используя Dynami c sql. Существует множество примеров того, как сделать это на SO.

Однако , так как вы пытаетесь получить отчет в SSRS, нет необходимости делать это. Если вы используете в отчете элемент управления Matrix, он сделает поворот за вас.

Вот краткое руководство (из памяти) по его выполнению.

Создайте новый отчет и добавьте новый набор данных. Задайте для запроса этого набора данных что-то вроде

SELECT    DATEPART(year, date) [year], 
   DATEPART(quarter, date) [quarter], 
   DATEPART(month, date) [month], 
   DATENAME(month, date) [monthName], 
   DATEPART(day, date) [day],
   Payee,
   Amount
FROM Pay_Details

примечания: нам в действительности не нужны столбцы получателя, квартал и день в этом примере, но вы можете расширить его, чтобы включить те, которые вам нравятся , Я также добавил столбец monthName

Теперь добавьте матрицу в область дизайна отчета. Вы получите таблицу 2х2 с заполнителями для «Столбцы», «Строки» и «Данные»

Перетащите поле [year] из набора данных и поместите его в «Строки», перетащите [month] в «Столбцы» и, наконец, перетащите [amount] в 'Данные'

Вот и все (почти)

Запустите отчет, и вы увидите, что данные были повернуты. Единственная проблема заключается в том, что в столбцах вашего месяца отображается номер месяца, чтобы исправить это, щелкните ячейку, содержащую номер месяца, и выберите [monthName] из списка. Столбцы все равно будут отсортированы по номеру, так как сортировка определяется свойствами группы столбцов.

...