使用表值参数查询
我需要帮助请写一个sproc,它需要一个表值参数@Locations,其Type定义如下:
CREATE TYPE [dbo].[tvpLocation] AS TABLE(
[CountryId] [int] NULL,
[ResortName] [nvarchar](100) NULL,
[Ordinal] [int] NOT NULL,
PRIMARY KEY CLUSTERED
(
[Ordinal] ASC
)WITH (IGNORE_DUP_KEY = OFF)
)
@Locations将包含至少1行。每一行都有一个非null的CountryId,并且可能有一个非null的ResortName。
每一行都有一个唯一的序号,第一行为0. @Locations中CountryId和ResortName的组合将是唯一的。
sproc需要搜索以下表结构。
右键单击图像和查看图像可以更好地看到图像,具体取决于您的浏览器。
现在这就是我被困住的地方,sproc应该能够找到Tours:
Tour的第一个TourHotel(Ordinal 0)
拥有相同的CountryId(和ResortName
如果指定的话)第1行
@Locations(Ordinal 0)。
如果@Locations有> 1行,
游览必须有额外的
TourHotels,所有必须在
这些剩余的@Locations行的剩余CountryIds(以及如果指定的ResortNames)。
编辑这是我最终使用的代码,基于Anthony Faull的建议。非常感谢Anthony:
select distinct T.Id
from tblTour T
join tblTourHotel TH on TH.TourId = T.Id
join tblHotel H ON H.Id = TH.HotelId
JOIN @Locations L ON
(
(
L.Ordinal = 0
AND TH.Ordinal = 0
)
OR
(
L.Ordinal > 0
AND TH.Ordinal > 0
)
)
AND L.CountryId = H.CountryId
AND
(
L.ResortName = H.ResortName
OR L.ResortName IS NULL
)
cross apply( select COUNT(TH2.Id) AS [Count] FROM tblTourHotel TH2 where TH2.TourId = TH.TourId ) TourHotelCount
where
TourHotelCount.[Count] = @LocationCount
group by T.Id, T.TourRef, T.Description, T.DepartureDate, T.NumNights, T.DepartureAirportId, T.DestinationAirportId, T.AirlineId, T.FEPrice
having COUNT(distinct TH.Id) = @LocationCount
没有找到相关结果
已邀请:
2 个回复
淘圃跺枯替
诧不达