SQL 服务器查询 returns 由于多个 group by 列而导致重复的结果
SQL Server query returns duplicate results because of multiple group by columns
这是我的查询:
select
Booking.BookingID, Booking.BookingNo,
Booking.Vcode, Booking.TransID,
Booking.StatusID,Booking.BookingDate,
BookingContact.FirstName, BookingContact.MiddleName, BookingContact.LastName,
Schedule.DepatureDateTime as DepartDate,
Origin.City as Origin, Destination.City as Destination,
PaxJourney.TripTypeID
from
Booking
inner join
Pax on Booking.BookingID = Pax.BookingID
inner join
PaxJourney on Pax.PaxID = PaxJourney.PaxID
inner join
Schedule on PaxJourney.ScheduleID = Schedule.ScheduleID
inner join
City as Origin on Schedule.DepartureCityID = Origin.CityID
inner join
City as Destination on Schedule.ArrivalCityID = Destination.CityID
inner join
BookingContact on Booking.BookingID = BookingContact.BookingID
group by
Booking.BookingID ,Booking.BookingNo, Booking.Vcode, Booking.TransID,
Booking.StatusID,Booking.BookingDate, BookingContact.FirstName,
BookingContact.MiddleName, BookingContact.LastName,
Schedule.DepatureDateTime, Origin.City, Destination.City, PaxJourney.TripTypeID
问题:如何删除查询中的多个分组依据字段?
由于这两个 "Origin.City, Destination.City" 列,当我按部分删除组中的任何一列时,我得到了重复的数据我得到了错误:
Msg 8120, Level 16, State 1, Line 22
Column 'City.City' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
我想对一列使用分组依据,例如 "group by Booking.BookingID"
好吧,正如错误所述,您需要使用聚合函数。您不会分组的所有列都必须使用聚合。
如果您只有一个基于 Booking.BookingId
的分组依据,您需要对您 select 的所有其他列使用聚合函数。例如:
SELECT Booking.BookingId, MAX(City.City) as City
FROM Booking
GROUP BY Booking.BookingId
即使 City.City
的所有行都显示相同的值,SQL 服务器也不会执行您的查询,因为它 可能 出现重复值与不同的内容。这样,您需要在所有未分组的列上定义适当的聚合(例如 MIN
、MAX
、AVG
等)。
这是我的查询:
select
Booking.BookingID, Booking.BookingNo,
Booking.Vcode, Booking.TransID,
Booking.StatusID,Booking.BookingDate,
BookingContact.FirstName, BookingContact.MiddleName, BookingContact.LastName,
Schedule.DepatureDateTime as DepartDate,
Origin.City as Origin, Destination.City as Destination,
PaxJourney.TripTypeID
from
Booking
inner join
Pax on Booking.BookingID = Pax.BookingID
inner join
PaxJourney on Pax.PaxID = PaxJourney.PaxID
inner join
Schedule on PaxJourney.ScheduleID = Schedule.ScheduleID
inner join
City as Origin on Schedule.DepartureCityID = Origin.CityID
inner join
City as Destination on Schedule.ArrivalCityID = Destination.CityID
inner join
BookingContact on Booking.BookingID = BookingContact.BookingID
group by
Booking.BookingID ,Booking.BookingNo, Booking.Vcode, Booking.TransID,
Booking.StatusID,Booking.BookingDate, BookingContact.FirstName,
BookingContact.MiddleName, BookingContact.LastName,
Schedule.DepatureDateTime, Origin.City, Destination.City, PaxJourney.TripTypeID
问题:如何删除查询中的多个分组依据字段?
由于这两个 "Origin.City, Destination.City" 列,当我按部分删除组中的任何一列时,我得到了重复的数据我得到了错误:
Msg 8120, Level 16, State 1, Line 22
Column 'City.City' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
我想对一列使用分组依据,例如 "group by Booking.BookingID"
好吧,正如错误所述,您需要使用聚合函数。您不会分组的所有列都必须使用聚合。
如果您只有一个基于 Booking.BookingId
的分组依据,您需要对您 select 的所有其他列使用聚合函数。例如:
SELECT Booking.BookingId, MAX(City.City) as City
FROM Booking
GROUP BY Booking.BookingId
即使 City.City
的所有行都显示相同的值,SQL 服务器也不会执行您的查询,因为它 可能 出现重复值与不同的内容。这样,您需要在所有未分组的列上定义适当的聚合(例如 MIN
、MAX
、AVG
等)。