4

大家好,

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

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

表:

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

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

提前致谢

4

1 回答 1

4

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

CTE按每个产品的价格对供应商进行排序,主查询使用该排序仅检索价格最低的供应商。

注意:因为我使用的是RANK,如果多个供应商碰巧有相同的最低价格,他们将全部被退回。如果这不正确,请更改RANKROW_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
于 2013-01-30T14:18:03.297 回答