Создание сводной таблицы из запроса SQL - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть запрос SQL, который возвращает следующий результат:

enter image description here

Данные получены из представления, которое возвращает данные опроса о пребывании в отеле.Если вы видите столбец Question содержит 5 различных значений, которые повторяются для каждого номера отчета.Таким образом, в Question есть 5 отдельных записей для каждого номера отчета.Столбец Answer имеет значения для каждой записи в столбце.Я пытаюсь создать отчет, в котором каждая из этих записей в столбце Question будет преобразована в 5 отдельных столбцов, а значениями будут записи из Answer, как показано ниже:

enter image description here

Я искал жизнеспособное решение, поскольку я не очень хорошо знаком с SQL и узнал о сводных таблицах и о том, как группы могут быть преобразованы в столбцы с помощью сводных таблиц.Но я не могу понять, как мне его создать.

Я нашел какое-то объяснение здесь и здесь , но оба они кажутся деталями конфигурации для построителя отчетов.Не уверен, как это сделать с помощью SQL-запроса.

Любая помощь будет отличной!

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

Вы можете попробовать следующий запрос:

 SELECT DISTINCT t.ReportNumber, t.Datecreated, t.Name, p.City, p.Hotel, p.Rating,
 p.Comments, p.TransportationMode
 FROM tablename t
 PIVOT (MAX(Datecreated)
 FOR Question IN ([City], [Hotel], [Rating], [Comments], [TransportationMode])) AS P
0 голосов
/ 27 сентября 2018

Вы можете получить желаемый результат с условным агрегированием:

declare @tmp table(
    ReportNumber int, 
    Datecreated  date, 
    Name         varchar(50), 
    Question     varchar(50),
    Answer       varchar(50) 
)

insert into @tmp values 
 (123, '2018-04-24', 'Shane', 'City'               ,'Dallas')
,(123, '2018-04-24', 'Shane', 'Hotel'              ,'Marriott')
,(123, '2018-04-24', 'Shane', 'Rating'             ,'Green')
,(123, '2018-04-24', 'Shane', 'Comments'           ,'Very Good')
,(123, '2018-04-24', 'Shane', 'TransportationMode' ,'Van')
,(124, '2018-04-24', 'Ralph', 'Hotel'              ,'Houston')
,(124, '2018-04-24', 'Ralph', 'City'               ,'Hilton')
,(124, '2018-04-24', 'Ralph', 'Rating'             ,'Yellow')
,(124, '2018-04-24', 'Ralph', 'Comments'           ,'Decent')
,(124, '2018-04-24', 'Ralph', 'TransportationMode' ,'Van')

select ReportNumber, Datecreated, 
 max(case when Question='City'               then Answer else '' end) as City,
 max(case when Question='Hotel'              then Answer else '' end) as Hotel,
 max(case when Question='Rating'             then Answer else '' end) as Rating,
 max(case when Question='Comments'           then Answer else '' end) as Comments,
 max(case when Question='TransportationMode' then Answer else '' end) as TransportationMode
from @tmp 
group by ReportNumber, Datecreated

Результат:

enter image description here

0 голосов
/ 26 сентября 2018

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

select * from 
(
select * from query
) src
pivot
 (max(values) for Question in ([City],[Hotel],[Rating],[Comments],[TransportationMode])
 ) pvt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...