【发布时间】:2014-10-08 10:22:53
【问题描述】:
我正在对一个 SQL 表进行查询,该表具有几列以及几行数据,并且该查询根据查询中给出的条件为每个唯一的第一列和第二列返回一行。
例如我有下表CC
product term bid offer bidcp offercp
AA sep14 20 10 x y
AA Sep14 15 9 p q
BA Sep14 30 15 as ps
XY Sep14 25 15 r t
XY Oct14 30 20 t r
XY Oct14 25 22 p q
当我对上表运行查询时,它应该返回以下数据
product term bid offer bidcp offercp
AA sep14 20 9 x q(coming from a record which has lowest offer)
BA Sep14 30 15 as ps
XY Sep14 25 15 r t
XY Oct14 30 20 t r
当我执行以下查询时,它甚至通过bidcp 和offercp 将CC 中的数据分组并返回几乎所有行,因为offercp 和bidcp 在一种或另一种方式中都是唯一的,但我只是想要@ 987654327@ 和 offercp 是 bid 和 offer 的来源,假设 bid 和 offer 对每个产品和术语都是唯一的
select product,term,max(bid) as bid,min(offer) as offer,bidcp,offercp from canadiancrudes where product like '%/%' group by product,term,bidcp,offercp
但是,当我从 groupby 子句中删除 bidcp 和 offercp 时,它给了我一个明显的错误
Column 'CC.BidCP' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
有没有更好的解决方法?
【问题讨论】:
-
这张表上是否有标识或主键?您使用的是什么版本的 SQL Server?
-
您的结果似乎表明对
product和term进行分组就足够了。选择分组中的其他 2 列是否有业务逻辑原因? -
如果某一行的出价较高,而另一行的出价较低怎么办?
-
@AHiggins 我正在使用 SQL Server 2012,并且我在该表上有一个主键
-
@shree.pat18 是的,按产品和术语分组就我而言就足够了,但最后看看我的问题
标签: sql sql-server sql-server-2012 aggregate-functions