我有一个返回以下结果的SQL查询:
数据来自返回酒店住宿调查数据的视图。如果您看到Question
列包含5个不同的值,则将为每个报告编号重复这些值。因此,每个报告编号在Question
中有5个单独的条目。 Answer
列具有该列中每个条目的值。我正在尝试创建一个报告,其中Question
列中的每个条目都将转换为5个单独的列,其值将是Answer
中的条目,如下所示:
我搜索可行的解决方案,因为我对SQL不太熟悉,并了解了数据透视表以及如何使用数据透视表将组转换为列。但是我不明白如何创建一个。
我找到了一些解释here和here,但两者似乎都类似于报表生成器的配置详细信息。不知道如何使用sql查询来做到这一点。
任何帮助都会很棒!
答案 0 :(得分:1)
您可以尝试如下所示,我认为其中包含城市,酒店..值的值列
pgexec
答案 1 :(得分:0)
您可以尝试以下查询:
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
答案 2 :(得分:0)
您可以通过条件聚合获得所需的输出:
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
结果: