2015-09-04 47 views
0

我有表BIDS,其中包含很多列和行,但我只想选择包含最低BIDPRICE的行。因为它 不是在聚合函数如何从表中选择最小值的记录?

包含当我把BidderName

Select min(Cast(Bids.BidPrice as INT)), BidBidderName from bids BidBidderName 

但它抛出错误

列“bids.BidBidderName”在选择列表中无效然后它显示所有记录,但我只想要包含最低竞标价格的记录。

回答

0

您可以使用子查询:

Select BidPrice, BidBidderName from bids 
where Bids.BidPrice in (Select min(Cast(b.BidPrice as INT)) from bids b) 

或者INNER JOIN

Select b1.BidPrice, b1.BidBidderName from bids b1 
inner join (select Min(BidPrice) BidPrice from @bids) as b2 on b.BidPrice = b2.BidPrice 
0

如果你只是想有最低投标价一个解决方案是使用一个子查询找到的最低价格像行这:

Select BidPrice, BidBidderName 
from bids 
where BidPrice = (select min(Cast(BidPrice as INT)) from bids) 

如果BidPrice是金钱或数字类型(whic h最有可能应该是)将这个转换为int不是必需的。

如果你

Select Min(BidPrice) BidPrice, BidBidderName 
from bids 
group by BidBibberName 

你反而会得到每一个投标人的报价最低。

+0

最后一个给出了我不想要的许多记录,我想单价最低的记录 – Covert

+0

@Covert是的,我只包含第二个查询以显示不同之处。第一个应该是你想要的。它会给你匹配最低价格的行。 – jpw

+0

@Covert所以第一个查询工作,并提供所需的输出,或者是你想要的东西? – jpw

1

这是一个选项,将获得最低价格的行。

Select top 1 BidPrice 
    , BidBidderName 
from bids 
order by Cast(BidPrice as INT) 
0

尝试:

ROW_NUMBER()

;with cte1 
as 
(
select BidderName ,BidPrice,Row_Number() Over(order by price asc) as rn from bids 
) 
select * from cte1 where rn=1; 

或者

敏(BidPrice)在(PARTITION BY BidderName顺序按价格升序)

select top 1 BidderName ,Min(BidPrice) Over(PARTITION BY BidderName order by price asc) as minBidPrice from bids