3

価格設定のルールの表があります。ProductTypeID次のクエリを使用して、製品のタイプを示す各 の最大割引を取得しています。

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

これは完全に機能しますが、これをさらに拡張して、 のリストからProductID最大の割引を取得する必要があります。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

現在、これら 2 つのクエリを結合するのに苦労しています。ディスカウント テーブルの各製品の最大ディスカウントを取得し、これをマージンから差し引くだけです。この 2 つの退職を結合するにはどうすればよいですか?

どうもありがとう

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

通常、このような状況では 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 に答える