为多种产品选择最低价格

时间:2013-01-30 14:01:51

标签: sql sql-server tsql select group-by

Hy all,

对于项目,我需要概述所有产品,以便找到价格最低的供应商。因此,对于每种产品,必须有一个价格和供应商的结果

如果尝试了一百个查询,但我找不到合适的查询。

表:

CREATE TABLE [dbo].[product](
 [id] [int] IDENTITY(1,1) NOT NULL,
 [picture_name] [varchar](255) NOT NULL)


CREATE TABLE [dbo].[supplier](
 [id] [int] IDENTITY(1,1) NOT NULL,
 [name] [varchar](50) NOT NULL)

CREATE TABLE [dbo].[supplier_overview_product](
 [supplier] [int] NOT NULL,
 [product] [int] NOT NULL,
 [price] [real] NOT NULL)

产品是FK产品 供应商是FK供应商

这就是我所拥有的:

SELECT s.name, MIN(sop.price)
FROM dbo.supplier_overview_product AS sop
JOIN dbo.product AS p
ON sop.product = p.id
JOIN dbo.supplier AS s
ON s.id  = sop.supplier
GROUP BY s.name

但没有供应商。我想知道那是谁。

提前致谢

1 个答案:

答案 0 :(得分:3)

我理解您的问题意味着您希望每个产品的价格最低的供应商。

CTE按价格为每个产品订购供应商,主查询使用该订单仅检索价格最低的供应商。

注意:因为我使用RANK,如果多个供应商碰巧具有相同的最低价格,则会全部退回。如果这不正确,请将RANK更改为ROW_NUMBER

;WITH SuppliersByPrice AS (
    SELECT product, supplier, price,
        RANK() OVER (PARTITION BY product ORDER BY price) as ord
    FROM supplier_overview_product
)
SELECT SBP.product, SBP.price, S.name
FROM SuppliersByPrice SBP
    INNER JOIN Supplier S ON S.id = SBP.supplier
WHERE SBP.ord = 1