Je reçois la vente totale en utilisant la requête suivante.La fonction Agréger renvoie une valeur incorrecte lors de la jonction d'un autre tableau.
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'
Je souhaite ajouter une autre colonne pour obtenir la vente brute. Pour cela, je dois faire une jointure avec une autre table appelée AirTraveler.
Mais une fois que j'ajouter une nouvelle table à la requête
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'
il donne un résultat incorrect de [TotalSale] .les fonctions d'agrégat renvoient des valeurs erronées, car il peut y avoir plusieurs AirTraveler par numéro de réservation, ce qui est correct . Que puis-je faire pour résoudre le problème de la fonction d'agrégation?
Je suis actuellement coincé. J'utilise SQL Server.
Merci d'avance.
Sûrement votre le total est correct même avant cela parce que 'bookingdetail' a beaucoup de lignes ? Quoi qu'il en soit, la solution est d'utiliser 'WHERE EXISTS' plutôt que de se joindre. –
@ Nick.McDermaid: en utilisant WHERE EXISTS, comment vais-je obtenir la valeur de [AT]. [FareDetails] .query ('string (/ AirFareInfo [1]/PT [1])'). Pourriez-vous s'il vous plaît modifier la requête susmentionnée. –