2015-07-04 66 views
0

这里多组重复的结果是我的查询:SQL Server查询返回,因为列

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”列的重复数据,当我通过部分我有错误删除组中的任何一列:

消息8120,级别16,状态1因为它不是在聚合函数或GROUP BY子句中包含22行
列“City.City”在选择列表中无效。

我想有一列“的Booking.BookingID组”使用组像

+0

您无论从'select'和'组by'删除它们。除此之外,不可能说出你想要的内容,因为你没有描述你想要查询的内容,期望的结果或者样本数据。 –

回答

2

那么你需要使用一个聚合功能,作为错误陈述。所有不会分组的列都必须使用聚合。

如果你只有一组基于Booking.BookingId您需要在您选择其他所有列使用聚合函数。例如:

SELECT Booking.BookingId, MAX(City.City) as City 
FROM Booking 
GROUP BY Booking.BookingId 

即使City.City所有行显示相同的值,SQL Server将无法执行查询,因为它可能发生不同内容的重复值。这样,您需要在所有未分组的列上定义适当的聚合(例如MINMAXAVG等)。

+0

感谢它的工作。 :) –

+0

很高兴帮助你。如果这是您的解决方案,您可以将其标记为您的答案并/或将其取消,这将有助于他人更快地找到解决方案。顺便说一句,欢迎来到堆栈溢出。 – Ionic