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
但没有供应商。我想知道那是谁。
提前致谢
答案 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