다음 쿼리를 사용하여 Total 판매를 받고 있습니다.더 많은 테이블을 결합 할 때 집계 함수가 잘못된 값을 리턴합니다.
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'
이 올바른지 예약 ID 당 여러 AirTraveler,있을 수 있기 때문에 국지적 집계 함수가 잘못된 값을 반환 [TotalSale]의 잘못된 결과를주고있다 . 집계 함수 문제를 해결하기 위해 무엇을 할 수 있습니까?
저는 실제로 붙어 있습니다.
SQL Server를 사용하고 있습니다.
미리 감사드립니다.
확실히 사실 결코 생각하여 'bookingdetail'에 많은 행이 있기 때문에 total이 옳다. ? 어쨌든 해결책은 합류하기보다는'존재하는 곳 '을 사용하는 것입니다. –
@ Nick.McDermaid : WHERE EXISTS를 사용하여 [AT]. [FareDetails] .query ('string (/ AirFareInfo [1]/PT [1])')의 값을 얻으려면 어떻게해야합니까? 앞서 언급 한 쿼리를 편집하십시오. –