我使用SQL Server 2014和我有一个使用3个表给我与住客,保留下面的输出中的简单查询:如何修改此SQL查询以获取位于其他表中的信息?
查询看起来是这样的:
USE MyDatabase
SELECT a.ResID, a.Name, a.Property, c.ArrivalDate,c.DepartureDate,c.ConfNum,
d.CHAR07, c.StatusCode,c.CreatedOn, c.UpdatedBy, c.CreatedBy
FROM GuestStaySummary a
left join GuestNameInfo b on b.ResID = a.ResID
left join reservationstay c on c. ResID = a. ResID
WHERE a.PrimaryGuest = '+'
输出是如下所示:
ResID Property Name ArrivalDate DepartureDate ConfNum StatusCode CreatedOn UpdatedBy CreatedBy
125 ABC Jones 2015-08-20 2015-08-27 659874 CONFIRMED 2015-03-10 AP01 AP01
由于系统上的应用程序升级,所有预留都被取消并重新创建。因此,进入上述成了如下:
ResID Property Name ArrivalDate DepartureDate ConfNum StatusCode CreatedOn UpdatedBy CreatedBy
125 ABC Jones 2015-08-20 2015-08-27 659874 CANCELED 2015-03-10 R5 AP01
358 ABC Jones 2015-08-20 2015-08-27 742651 CONFIRMED 2015-05-15 R5 AP01
原来ResID
125现在有一个StatusCode
为“取消”,并已与新的ResId
和新ConfNum
重新创建。
ResId
125(现Res ID 358)的原始CreatedOn
(即2015-03-10)对我的分析目的非常重要。换句话说,我需要链接ResID
358的CreatedOn
与2015-03-10而不是它的新的CreatedOn
这是2015-05-15。
链接这两个条目的唯一方法是使用已存储在称为的表中的名为CHAR07
的列中的“原始”ConfNum
。
我已经修改我的查询如下检索“取消”保留所有的名单和他们的等价物“新的”保留:
USE MyDatabase
SELECT a.ResID, a.Name, a.Property, c.ArrivalDate,c.DepartureDate,c.ConfNum,
d.CHAR07 AS ‘Original ConfNum’, c.StatusCode,c.CreatedOn, c.UpdatedBy, c.CreatedBy
FROM GuestStaySummary a
left join GuestNameInfo b on b.ResID = a.ResID
left join reservationstay c on c. ResID = a. ResID
left join P5RESERVATIONSTAY d on d.RSY_RESERVATIONSTAYID = a.ResID
left join P5RESERVATIONSTAY d2 on d2.CHAR07 = c.ConfNum
WHERE b.PrimaryGuest = '+'
输出如下内容:
ResID Property Name ArrDate DepDate ConfNum Original ConfNum StatusCode CreatedOn UpdatedBy CreatedBy
125 ABC Jones 2015-08-20 2015-08-27 659874 NULL CANCELED 2015-03-10 R5 AP01
358 ABC Jones 2015-08-20 2015-08-27 742651 659874 CONFIRMED 2015-05-15 R5 AP01
它可以完成这项工作,但我需要在Excel中使用VLOOKUP来获取原始的CreatedOn。
我想我的SQL查询给我下面的输出:
ResID Property Name ArrDate DepDate ConfNum Original ConfNum StatusCode CreatedOn OriginalCreatedOn UpdatedBy CreatedBy
358 ABC Jones 2015-08-20 2015-08-27 742651 659874 CONFIRMED 2015-05-15 2015-03-10 R5 AP01
我怎样才能做到这一点?
不确定为什么要使用所有左连接。一旦过滤了'PrimaryGuest',无论如何您都有效地获得了内连接。你也加入到'd2'中,但是不要使用它的任何一列,我真的不明白为什么你一开始就使用这个表格两次。 – shawnt00
我加入到d2的逻辑,它会帮助我获取原始的CreatedOn,并将其与“新”预订相匹配,但我被困在我的编码的这个级别。所以,我把它留在那里。 – user3115933