按单列分组但返回所有列而不包括聚合函数中的其他列

时间:2015-04-08 15:14:44

标签: sql-server aggregate-functions

我正在处理一个SQL查询,该查询应该按照bidBroker列进行分组并返回表中的所有列。

我使用以下查询尝试了它

select  Product,
    Term,
    BidBroker,
    BidVolume,
    BidCP,
    Bid,
    Offer,
    OfferCP,
    OfferVolume,
    OfferBroker,
    ProductID,
    TermID 
from canadiancrudes 
group by BidBroker

上面的查询给我一个错误如下

  

Column' canadiancrudes.Product'在选择列表中无效,因为它不包含在聚合函数或   GROUP BY子句。

有没有其他方法可以返回bidBroker的所有数据分组,而不会更改来自CanadadianCrudes的数据顺序?

3 个答案:

答案 0 :(得分:1)

首先,如果你想要聚集,你应该学习agregate功能。 然后分组变得更加明显。

我认为你应该解释一下你在这里想要完成什么,因为我怀疑你是在尝试排序Bidbroker,而不是分组。

答案 1 :(得分:1)

如果您的意思是想要按BidBroker排序,可以使用:

SELECT  Product,Term,BidBroker,BidVolume,BidCP,Bid,Offer,OfferCP,OfferVolume,OfferBroker,ProductID,TermID
FROM canadiancrudes
ORDER BY BidBroker

如果您想要GROUP BY,并提供示例数据,您可以使用:

SELECT c1.Product,c1.Term,c1.BidBroker,c1.BidVolume,c1.BidCP,c1.Bid,c1.Offer,c1.OfferCP,c1.OfferVolume,c1.OfferBroker,c1.ProductID,c1.TermID
FROM canadiancrudes c1
WHERE c1.YOURPRIMARYKEY IN (
    select MIN(c2.YOURPRIMARYKEY) from canadiancrudes c2 group by c2.BidBroker
)

将YOURPRIMARYKEY替换为包含行唯一ID的列。

答案 2 :(得分:0)

正如其他人所说,如果你不想聚合某些东西,请不要使用“分组依据”。如果您确实希望汇总一列但也包括其他列,请考虑研究“分区”。