从SQL查询创建数据透视表

时间:2018-09-26 15:22:19

标签: sql-server tsql pivot-table ssrs-2012

我有一个返回以下结果的SQL查询:

enter image description here

数据来自返回酒店住宿调查数据的视图。如果您看到Question列包含5个不同的值,则将为每个报告编号重复这些值。因此,每个报告编号在Question中有5个单独的条目。 Answer列具有该列中每个条目的值。我正在尝试创建一个报告,其中Question列中的每个条目都将转换为5个单独的列,其值将是Answer中的条目,如下所示:

enter image description here

我搜索可行的解决方案,因为我对SQL不太熟悉,并了解了数据透视表以及如何使用数据透视表将组转换为列。但是我不明白如何创建一个。

我找到了一些解释herehere,但两者似乎都类似于报表生成器的配置详细信息。不知道如何使用sql查询来做到这一点。

任何帮助都会很棒!

3 个答案:

答案 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

结果:

enter image description here

相关问题