我有一个SQL问题(MS SQL Server 2012),我只想要每个结果一个结果,但在某些行中有不同的项目,因此group by不起作用。
以下是声明:
Select Deliverer, ItemNumber, min(Price)
From MyTable
Group By Deliverer, ItemNumber
所以我希望一个项目的价格最低的送货员。 通过此查询,我得到每个送货员的最低价格。
结果如:
DelA 12345 1,25
DelB 11111 2,31
并不喜欢
DelA 12345 1,25
DelB 12345 1,35
DelB 11111 2,31
DelC 11111 2,35
我知道这可能是一个简单的解决方案的愚蠢问题,但我现在尝试了大约三个小时,却找不到解决方案。有人说,我对SQL不是很有经验。
答案 0 :(得分:2)
只需在适当的时候(最小或最大)将聚合函数添加到您的deliveryrer字段。根据您的数据,我猜你需要min(deliveryrer),因此使用下面的查询来获得你想要的结果。
Select mIN(Deliverer), ItemNumber, min(Price)
From MyTable
Group By ItemNumber;
以下查询应该可以帮助您以最低的价格获得送货员:
SELECT TABA.ITEMNUMBER, TABA.MINPRICE, TABB.DELIVERER
FROM
(
SELECT ITEMNUMBER, MIN(PRICE) MINPRICE
FROM MYTABLE GROUP BY
ITEMNUMBER
) TABA JOIN
MYTABLE TABB
ON TABA.ITEMNUMBER=TABB.ITEMNUMBER AND
TABA.MINPRICE = TABB.PRICE
答案 1 :(得分:0)
您应该可以使用RANK()
(或DENSE_RANK()
)函数以及一些分区执行此操作,例如:
; With rankings as (
SELECT Deliverer,
rankings.ItemNumber,
rankings.Price
RANK() OVER (PARTITION BY ItemNumber ORDER BY Price ASC) AS Ranking
FROM MyTable (Deliverer, ItemNumber, Price)
)
SELECT rankings.Deliverer,
rankings.ItemNumber,
rankings.Price
FROM rankings
WHERE ranking = 1