我在弄清楚如何使别名正常工作方面遇到了一些麻烦。我有一个复杂的查询,包括两次相同的表:HIFIS_Services
。一个是别名HIFIS_Services_Goods
,另一个是别名HIFIS_Services_Stay
。当然,它们都包含相同的列,因此我已将HIFIS_Services_Goods.ServiceID
重命名为GoodsServiceID
。
这是我的初始查询工作正常:
SELECT
vw_Stays.ClientID,
vw_Stays.LastName,
vw_Stays.FirstName,
HIFIS_Places.Name AS ReferrerName,
vw_Stays.RoomName AS MotelName,
HIFIS_ReasonForGoodsActivityTypes.NameE AS ReasonForMotel,
HIFIS_UnitOfMeasureTypes.NameE AS RoomType,
vw_Stays.StayID,
HIFIS_Services_Stay.DateStart AS StayStart,
HIFIS_Services_Stay.OrganizationID AS StayOrganizationID,
HIFIS_Services_Goods.OrganizationID AS GoodsOrganizationID,
HIFIS_Services_Goods.ServiceID AS GoodsServiceID,
HIFIS_Services_Goods.ServiceTypeID,
HIFIS_Services_Goods.DateStart AS GoodsStart,
vw_Stays.BedDateStart,
vw_Stays.BedDateEnd,
vw_Stays.StayDateStart,
vw_Stays.CurrentAge,
HIFIS_Goods.GoodTypeID,
HIFIS_Goods.UnitPrice,
HIFIS_Groups.GroupTypeID,
HIFIS_People_Groups.PeopleGroupID,
HIFIS_People_Groups.DateEnd AS FamilyEnd,
HIFIS_People_Groups.DateStart AS FamilyStart,
HIFIS_Services_Stay.FromReferrerPlaceID,
HIFIS_Services_Goods.Comments
FROM ((((((((((vw_Stays
INNER JOIN HIFIS_Services AS HIFIS_Services_Stay ON vw_Stays.ServiceID=HIFIS_Services_Stay.ServiceID)
LEFT OUTER JOIN HIFIS_Client_Services AS HIFIS_Client_Services_Goods ON vw_Stays.ClientID=HIFIS_Client_Services_Goods.ClientID)
INNER JOIN HIFIS_Clients ON vw_Stays.ClientID=HIFIS_Clients.ClientID)
LEFT OUTER JOIN HIFIS_Services AS HIFIS_Services_Goods ON HIFIS_Client_Services_Goods.ServiceID=HIFIS_Services_Goods.ServiceID)
LEFT OUTER JOIN HIFIS_GoodsActivities ON HIFIS_Services_Goods.ServiceID=HIFIS_GoodsActivities.ServiceID)
LEFT OUTER JOIN HIFIS_Goods ON HIFIS_GoodsActivities.GoodsActivitiesID=HIFIS_Goods.GoodsActivitiesID)
LEFT OUTER JOIN HIFIS_ReasonForGoodsActivityTypes ON HIFIS_GoodsActivities.ReasonForGoodsActivityTypeID=HIFIS_ReasonForGoodsActivityTypes.ID)
LEFT OUTER JOIN HIFIS_UnitOfMeasureTypes ON HIFIS_Goods.UnitOfMeasureTypeID=HIFIS_UnitOfMeasureTypes.ID)
INNER JOIN HIFIS_Places ON HIFIS_Services_Stay.FromReferrerPlaceID=HIFIS_Places.PlaceID)
LEFT OUTER JOIN HIFIS_People_Groups ON HIFIS_Clients.PersonID=HIFIS_People_Groups.PersonID)
LEFT OUTER JOIN HIFIS_Groups ON HIFIS_People_Groups.GroupID=HIFIS_Groups.GroupID
WHERE HIFIS_Services_Stay.OrganizationID=2
AND PeopleGroupID = (
SELECT PeopleGroupID
FROM HIFIS_People_Groups
INNER JOIN HIFIS_Groups ON HIFIS_People_Groups.GroupID = HIFIS_Groups.GroupID
WHERE GroupTypeID=1
)
但是,当我添加以下子句时,我得到Invalid column name: GoodsServiceID
。
如果我只使用ServiceID
,我会获得Ambiguous column name
。
如果我使用HIFIS_Services_Goods.ServiceID
,我会获得Invalid object name: HIFIS_Services_Goods
。
如果我尝试HIFIS_Services.ServiceID
或HIFIS_Services.GoodsServiceID
,我会The multi-part identifier could not be bound
。
AND GoodsServiceID = (
SELECT ServiceID
FROM ((((HIFIS_Services_Goods
INNER JOIN HIFIS_Client_Services HIFIS_Client_Services_Goods ON vw_Stays.ClientID=HIFIS_Client_Services_Goods.ClientID)
INNER JOIN HIFIS_Services HIFIS_Services_Goods ON HIFIS_Client_Services_Goods.ServiceID=HIFIS_Services_Goods.ServiceID)
INNER JOIN HIFIS_GoodsActivities ON HIFIS_Services_Goods.ServiceID=HIFIS_GoodsActivities.ServiceID)
INNER JOIN HIFIS_ReasonForGoodsActivityTypes ON HIFIS_GoodsActivities.ReasonForGoodsActivityTypeID=HIFIS_ReasonForGoodsActivityTypes.ID)
INNER JOIN HIFIS_UnitOfMeasureTypes ON HIFIS_Goods.UnitOfMeasureTypeID=HIFIS_UnitOfMeasureTypes.ID
WHERE HIFIS_Services_Goods.OrganizationID=2
AND HIFIS_Goods.GoodTypeID=1000
AND HIFIS_Services_Goods.ServiceTypeID=31
)
我做错了什么?