我正在使用SQL Server 2012而我无法弄清楚如何实现从特定表中的列中提取AVERAGE的代码。如果有人能帮助指出我所附的代码有什么问题,我会感激不尽。
正如您所看到的,我正在加入来自不同表的列以获得我期望的输出。 AVERAGE部分令我头疼!该专栏名为" RoomRate" (我需要按照ReservationID分组的金额的平均值)和我需要的表格被称为" ReservationStayDate"。
感谢您的帮助!
USE MY_DATABASE
SELECT a.ReservationStayID,
a.FirstName + ' ' + a.LastName AS 'Name',
b.PropertyCode AS'Property',
b.ReservationStatus,
b.MarketSegmentCode,
a.ArrivalDate,
a.DepartureDate,
c.AdultCount,
c.ChildCount,
b.GuestCount,
c.TaProfileID,
c.PMSConfirmationNumber,
c.CurrencyCode,
d.rsl_nationality,
d.rsl_country AS 'Cty of Residence',
d.rsl_totalroomrate,
e.Name AS 'Tour Operator',
e.CountryCode AS 'Market',
f.[RateAmount]
FROM GuestNameInfo a
JOIN GuestStaySummary b ON a.ReservationStayID = b.ReservationStayID
JOIN ReservationStay c ON c.ReservationStayID = b.ReservationStayID
JOIN P5RESERVATIONLIST d ON d.rsl_code = b.ReservationStayID
JOIN TravelAgency e ON e.TravelAgencyID = c.TAProfileID
JOIN
(SELECT avg(RateAmount) AS 'RateAmount'
FROM ReservationStayDate
GROUP BY ReservationStayID) ReservationStayDate f ON f.ReservationStayID = a.ReservationStayID
答案 0 :(得分:0)
您需要将ReservationStayID放在子选择选择列表中。
如果是一个整数列,也将RateAmount与1.0相乘。
答案 1 :(得分:0)
你的sql看起来应该是这样的
USE MY_DATABASE
SELECT a.ReservationStayID,
a.FirstName + ' ' + a.LastName AS 'Name',
b.PropertyCode AS'Property',
b.ReservationStatus,
b.MarketSegmentCode,
a.ArrivalDate,
a.DepartureDate,
c.AdultCount,
c.ChildCount,
b.GuestCount,
c.TaProfileID,
c.PMSConfirmationNumber,
c.CurrencyCode,
d.rsl_nationality,
d.rsl_country AS 'Cty of Residence',
d.rsl_totalroomrate,
e.Name AS 'Tour Operator',
e.CountryCode AS 'Market',
f.[RateAmount],
(SELECT avg(RateAmount)
FROM ReservationStayDate f
where f.ReservationStayID = a.ReservationStayID ) as RateAmount
FROM GuestNameInfo a
JOIN GuestStaySummary b ON a.ReservationStayID = b.ReservationStayID
JOIN ReservationStay c ON c.ReservationStayID = b.ReservationStayID
JOIN P5RESERVATIONLIST d ON d.rsl_code = b.ReservationStayID
JOIN TravelAgency e ON e.TravelAgencyID = c.TAProfileID
答案 2 :(得分:0)
使用OVER
子句,因为它比使用子查询派生聚合值更有效。
USE MY_DATABASE
SELECT a.ReservationStayID,
a.FirstName + ' ' + a.LastName AS 'Name',
b.PropertyCode AS'Property',
b.ReservationStatus,
b.MarketSegmentCode,
a.ArrivalDate,
a.DepartureDate,
c.AdultCount,
c.ChildCount,
b.GuestCount,
c.TaProfileID,
c.PMSConfirmationNumber,
c.CurrencyCode,
d.rsl_nationality,
d.rsl_country AS 'Cty of Residence',
d.rsl_totalroomrate,
e.Name AS 'Tour Operator',
e.CountryCode AS 'Market',
--Aggregate function with Over clause
AVG(f.RateAmount) OVER(PARTITION BY a.ReservationStayID) AS RateAmount
FROM GuestNameInfo a
JOIN GuestStaySummary b ON a.ReservationStayID = b.ReservationStayID
JOIN ReservationStay c ON c.ReservationStayID = b.ReservationStayID
JOIN P5RESERVATIONLIST d ON d.rsl_code = b.ReservationStayID
JOIN TravelAgency e ON e.TravelAgencyID = c.TAProfileID
JOIN ReservationStayDate f ON f.ReservationStayID = a.ReservationStayID