3

我有一张定价规则表。我正在ProductTypeID使用以下查询检索每个产品的最大折扣,这表明产品是哪种类型:

SELECT MAX(discount) as BiggestDiscount, ProductTypeID FROM dbo.SellingPriceRules
WHERE ProductTypeID is not null
GROUP by ProductTypeID
ORDER BY ProductTypeID

这非常有效,但是我需要对此进行扩展,并且对于ProductIDs 列表检索我最大的折扣。所以我需要找到ProductTypeID每个ProductID属于什么并检查我的SellPriceRules数据库以获得最大折扣ProductTypeID

所以,在我的Discounts桌子上,我有:

ProductID, Margin

在我的Products表中,我有:

ProductID, ProductTypeID

为了获取每个产品的 ProductTypeID,我有:

select * from Discounts m
INNER JOIN Product p on p.ProductID = m.ProductID
WHERE ProductTypeID is not null

我现在正在努力将这两个查询结合在一起。我只是想获得折扣表中每种产品的最大折扣,然后从我的利润中减去。我怎样才能将这两个退休人员结合在一起?

非常感谢

4

4 回答 4

2

你的所有逻辑都是正确的。您只需要将一个查询嵌入另一个查询的语法。

SELECT
  p.ProductID,
  p.ProductTypeID,
  m.Margin,
  d.BiggestDiscount,
  m.Margin - d.BiggestDiscount AS AdjustedMargin
FROM Product p
INNER JOIN Discounts m ON (p.ProductID = d.ProductID)
INNER JOIN (
  SELECT
    ProductTypeID,
    MAX(discount) as BiggestDiscount
  FROM SellingPriceRules
  GROUP BY ProductTypeID
) d ON (p.ProductTypeID = d.ProductTypeID)
WHERE p.ProductID IS NOT NULL
于 2013-07-11T15:31:47.717 回答
0

使用相关子查询

SELECT m.ProductID, m.Margin, p.ProductTypeID, 
  m.Margin - (SELECT MAX(discount) 
              FROM dbo.SellingPriceRules 
              WHERE ProductTypeID = p.ProductTypeID)
FROM Discounts m INNER JOIN Product p on p.ProductID = m.ProductID
WHERE p.ProductTypeID IS NOT NULL

@Annon 的执行计划

在此处输入图像描述

于 2013-07-11T15:33:27.490 回答
0

通常,您可以在这种情况下使用 CTE。像这样的东西:

;WITH current_discounts (BiggestDiscount, ProductTypeID)
AS (
    SELECT MAX(discount) as BiggestDiscount, ProductTypeID FROM dbo.SellingPriceRules
    WHERE ProductTypeID is not null
    GROUP by ProductTypeID
    ORDER BY ProductTypeID
)

SELECT
    m.ProductID,
    m.Margin - c.BiggestDiscount
FROM Discounts m
INNER JOIN Product p ON p.ProductID = m.ProductID
INNER JOIN current_discounts c ON p.ProductTypeID = c.ProductTypeID
于 2013-07-11T15:39:19.337 回答
0

你可以尝试这样的事情:

select *, Margin-BiggestDiscount from Discounts m
INNER JOIN Product p on p.ProductID = m.ProductID AND p.ProductTypeID is not null
inner join (
SELECT MAX(discount) as BiggestDiscount, ProductTypeID 
FROM dbo.SellingPriceRules
GROUP by ProductTypeID) as r on p.ProductTypeID = r.ProductTypeID
于 2013-07-11T15:40:42.603 回答