我正在使用SQL Server 2014,并且我有两个分别运行的查询,现在我需要连接这些查询,以便拥有一个输出。如何将这2个SQL查询合并为一个SQL查询
查询1立场如下:
USE MyDatabase
SELECT a.ReservationStayID,
c.Createdon,
a.FirstName + ' ' + a.LastName AS 'Name',
b.PropertyCode AS'Property',
b.ReservationStatus AS 'Status',
d.rsl_rateplan AS 'Rate Plan Code',
d.rsl_mealplan,
d.rsl_roomtype,
b.MarketSegmentCode AS 'Market Segment',
e.TravelAgencyTypeCode AS 'Source of Business',
a.ArrivalDate AS 'Date of Arrival',
a.DepartureDate AS 'Date of Departure',
(SELECT DATEDIFF (day,ArrivalDate,DepartureDate)
FROM ReservationStay c
WHERE c.ReservationStayID = a.ReservationStayID) AS 'Nights',
c.AdultCount AS 'Adult',
c.ChildCount AS 'Child',
b.GuestCount AS 'Guest',
d.rsl_reasonstay,
c.TaProfileID,
c.PMSConfirmationNumber,
c.CurrencyCode As 'Currency',
d.rsl_nationality AS 'Nationality',
d.rsl_country AS 'Country of Residence',
d.rsl_totalroomrate,
e.Name AS 'Tour Operator',
e.CountryCode AS 'Market Code',
g.CountryGroup AS 'Market',
(SELECT avg(RateAmount)/1.15
FROM ReservationStayDate f
where f.ReservationStayID = a.ReservationStayID) AS 'Rate Amount Excl.VAT',
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
WHERE a.PrimaryGuest='+' and d.rsl_primaryguest='+'
ORDER by a.ReservationStayID
而第二个查询:
use MyDatabase
select *
FROM (SELECT
ReservationStayID,count(reservationstayid) AS [Nights Spent],
datename(m,StayDate)+' '+ cast(datepart(yyyy,StayDate) as varchar) as [MTH],
avg(RateAmount) as [Rate],
CreatedOn
from ReservationStayDate
GROUP BY ReservationStayID,STAYDATE,RATEAMOUNT,CreatedOn
) AS S
ORDER by ReservationstayID
如果是这样的INNER JOIN,OUTER JOIN或一个完全不同的语法?
附加信息:
好,要更明确,这里有几个指针。 ReservationStayDate表列出按住宿日期保留的住宿人数(StayDate)。因此,如果客人在2014年10月31日至2014年11月4日之间逗留,ReservationStayDate表格每晚将显示4行(即:2014-10-31,2014-11-01,2014-11-02和2014-11-03)。
当我运行第一个查询时,我的输出对于每个来宾都是一行。现在,我需要为2个月以上(如上例所示)夜间出现的客人输出我的输出,其中添加的列名称为“MTH”(实际上显示月份和年份)和“已用夜间”。因此,输出将看起来像这样的客人谁花所有的夜晚在同一个月,并为那些谁超过2个月重叠:
ReservationStayId CreatedOn........ DateOfArrival DateOfDeparture MTH Nights
250 2014-09-05 2014-09-07 Sept 2014 2
285 2014-10-31 2014-11-04 Oct 2014 1
285 2014-10-31 2014-11-04 Nov 2014 3
我希望我做了它一个更清晰一点了解。如果没有,请评论,我会添加更多的具体信息。
表结构?预期结果?等等...更具体的你是在你的问题,你有更多的机会得到适当的帮助。 – bksi 2014-11-21 08:13:57
创建SQL小提琴http://www.sqlfiddle.com/。 – 2014-11-21 08:17:33
首先:您的第二个查询没有意义。您通过reservationstayid进行分组。所以'count(reservationstayid)'总是1,而不是“度过的夜晚”。而且,reservationstayid可能是桌子的关键。所以'avg(RateAmount)'总是一个记录的平均值,因此avg(RateAmount)= RateAmount。你的第一个查询是关于你的外连接的。你外连接'P5RESERVATIONLIST d',但是你的where子句中有'd.rsl_primaryguest ='+'',因此删除了任何外连接的记录(因为它的rsl_primaryguest将为null)。 – 2014-11-21 08:30:40