0
我使用以下查询获取总销售额。当加入更多表格时,聚合函数返回不正确的值
SELECT SUM([B].[TotalSale])
FROM [dbo].[BookingDetail] [BF] WITH (READPAST)
INNER JOIN [dbo].[Booking] [B] WITH (READPAST) ON [B].[BookingDetailID] = [BF].[ID]
WHERE [BF].[MarketID] = '2'
我想添加另一列来获得总销售额。 为此,我必须与名为AirTraveler的另一个表进行联接。
但是,一旦我添加一个新表来查询
SELECT
SUM([B].[TotalSale]) ,
SUM(CASE WHEN [B].[TravelSectorID] = 3 AND [B].[BookingStatusID] IN (16, 20, 22, 23) THEN COALESCE([B].[TotalSale], 0.0)
WHEN ([B].[TravelSectorID] = 1 AND [B].[IsDomestic] = 1 AND CONVERT(varchar, [AT].[FareDetails].query('string(/AirFareInfo[1]/PT[1])')) = 'FlightAndHotel') THEN [AT].[TotalSale]
ELSE 0 END) AS [GrossSale]
FROM [dbo].[BookingDetail] [BF] WITH (READPAST)
INNER JOIN [dbo].[Booking] [B] WITH (READPAST) ON [B].[BookingDetailID] = [BF].[ID]
LEFT OUTER JOIN [dbo].[AirTraveler] [AT] WITH(READPAST) ON [B].[ID] = [AT].[BookingID]
WHERE [BF].[MarketID] = '2'
它给的[TotalSale] .the聚合函数返回错误值,因为有可能是每个订单ID多AirTraveler,这是正确的不正确的结果。我能做些什么来解决聚合函数问题?
我实际上被卡住了。
我正在使用SQL Server。
在此先感谢。
当然你的即使在此之前,总数也是正确的,因为'bookingdetail'有很多行?无论如何,解决方案是使用'WHERE EXISTS'而不是加入。 –
@ Nick.McDermaid:使用WHERE EXISTS,我如何获得[AT]的值[FareDetails] .query('string(/ AirFareInfo [1]/PT [1])')。你能编辑上述查询吗? –