SQL Pivot Query для извлечения данных из таблицы VIEW

Я использую SQL Server 2014, и у меня есть следующий запрос (который я преобразовал в таблицу VIEW):

SELECT 
  b.PropertyCode,
  c.PMSConfirmationNumber,
  x.[ReservationStayID],
  a.FirstName + ' ' + a.LastName AS 'Name',
  b.ReservationStatus AS 'Status',
  d.rsl_nationality AS 'Nationality',
  d.rsl_rateplan AS 'Rate Plan Code',
  d.rsl_roomtype AS 'Room Type',
  d.rsl_mealplan AS 'Meal Plan',
  b.GuestCount AS 'Total Guest',
  x.[Nights Spent] AS 'Room Nights',
  x.[MTH],
  x.[Rate] AS 'Room Rate WITH VAT',
  c.CurrencyCode, 
  h.ROE AS 'Rate of Exchange', 
  (x.[Nights Spent]*x.[Rate]*h.[ROE])/NULLIF(1.15,0) AS 'PkgRevenue, Excl. VAT', 
  ((x.[Nights Spent]*x.[Rate]*h.[ROE])/1.15)/NULLIF((b.GuestCount*x.[Nights Spent]),0)     AS 'GADR, Excl. VAT', 
  x.CreatedOn,
  x.[DateOfArrival],
  x.[DateOfDeparture],

  e.TravelAgencyTypeCode AS 'Source of Business', 
  c.TAProfileID, 
  e.Name AS 'Tour Operator', 
  g.CountryGroup AS 'Market', 
  c.TAProfileID2, 
  e2.Name AS 'Booking Origin (1)', 
  g2.CountryGroup AS 'Booking Origin (2)',

 FROM GuestNameInfo a
 JOIN GuestStaySummary b ON a.ReservationStayID = b.ReservationStayID
 LEFT JOIN ReservationStay c ON c.ReservationStayID = b.ReservationStayID
 LEFT JOIN P5RESERVATIONLIST d ON d.rsl_code = b.ReservationStayID 
 LEFT JOIN TravelAgency e ON e.TravelAgencyID = c.TAProfileID
 LEFT JOIN Market g ON e.CountryCode = g.CountryCode 
 LEFT JOIN TravelAgency e2 ON e2.TravelAgencyID = c.TAProfileID2
 LEFT JOIN Market g2 ON e2.CountryCode = g2.CountryCode 
 LEFT JOIN Exrate h ON h.Ccode = c.CurrencyCode 

 LEFT JOIN
 (
   SELECT 
     ReservationStayID,
     datename(m,StayDate) + ' ' + cast(datepart(yyyy,StayDate) as varchar) as [MTH],
     count(*) AS [Nights Spent],
     avg(RateAmount) as [Rate],
     min(CreatedOn) as CreatedOn,
     min(StayDate) as [DateOfArrival],
     max(StayDate) as [DateOfDeparture]
   FROM ReservationStayDate
   GROUP BY ReservationStayID, datename(m,StayDate) + ' ' + cast(datepart(yyyy,StayDate) as varchar)
 ) x ON x.ReservationStayID = b.ReservationStayID

 WHERE a.PrimaryGuest = '+' AND d.rsl_primaryguest = '+'

Теперь мне нужен сводный запрос, который будет работать с вышеуказанной таблицей просмотра. Я написал следующий запрос (показанный ниже), но мне кажется, что я что-то упустил, так как я получаю следующую ошибку при запуске кода: "Msg 207, уровень 16, состояние 1, строка 4 Неверное имя столбца" MTH "".

SELECT [Tour Operator],[MTH]

FROM HOLDINGS

PIVOT (SUM([ROOM NIGHTS])

FOR [MTH] IN ([NOVEMBER 2014],[DECEMBER 2014],[JANUARY 2015]))

AS PVTTABLE

1 ответ

Решение

Это не правильный синтаксис pivot и убедитесь, что ваше имя зовут HOLDINGS,

Синтаксис Pivot

SELECT <non-pivoted COLUMN>,
    [first pivoted column] AS <COLUMN name>,
    [second pivoted column] AS <COLUMN name>,
    ...
    [last pivoted column] AS <COLUMN name>
FROM
    (<SELECT query that produces the data>)
    AS <alias FOR the source query>
PIVOT
(
    <aggregation FUNCTION>(<COLUMN being aggregated>)
FOR
[<column that contains the values that will become column headers>]
    IN ( [first pivoted column], [second pivoted column],
    ... [last pivoted column])
) AS <alias FOR the PIVOT TABLE>
<optional ORDER BY clause>;

Ваш Pivot запрос должен быть примерно таким.

SELECT *
FROM   (SELECT [Tour Operator],
               [MTH],
               [ROOM NIGHTS]
        FROM   HOLDINGS) a
       PIVOT (Sum([ROOM NIGHTS])
             FOR [MTH] IN ([NOVEMBER 2014],
                           [DECEMBER 2014],
                           [JANUARY 2015])) AS PVTTABLE 
Другие вопросы по тегам