2

以下にクエリを記述しましたが、必要なデータが返されます。しかし、私はそれを書くためのより良い方法があると思わずにはいられません。私が必要としてTable1いるのは、ベンダーが属するカテゴリで、指定されたベンダーの価格よりも高い価格を持つすべての一意の行を見つけることです。(理論的には、ベンダーが属することができるカテゴリの数に制限はありません)。

  • VendorIDTable1は、、、Categoryおよびを含む相互参照テーブルです。price
  • 表2にはベンダー情報が含まれています
  • カテゴリ名を含むカテゴリテーブルがあります。

..。

SELECT DISTINCT Table2.name, Table2.city, Table2.state
FROM Table1 INNER JOIN Table2 ON Table1.VendorID = Table2.VendorID
WHERE Table1.Category IN (49,50,45)
    AND Table1.price > (SELECT price FROM Table1 WHERE VendorID = 69041 AND Category = 50)
    AND Table1.price > (SELECT price FROM Table1 WHERE VendorID = 69041 AND Category = 49)
    AND Table1.price > (SELECT price FROM Table1 WHERE VendorID = 69041 AND Category = 45)
4

2 に答える 2

4

Common Table Expressionまたはサブクエリを使用して、最初に必要なすべてのデータを取得してから、テーブルをその「ビュー」に結合できます。

;WITH MaxPricePerCategory
AS
    (
    SELECT MAX(Price) AS [Price]
        -- You can remove category if you just need the maximum price
        , Category
    FROM Table1
    WHERE VendorID = 69041
    AND Table1.Category IN (49,50,45)
    GROUP BY Category
    )
SELECT DISTINCT Table2.name
    , Table2.city
    , Table2.state
FROM Table1 
JOIN Table2 
    ON Table1.VendorID = Table2.VendorID
JOIN MaxPricePerCategory MPPC
    ON Table1.Category = MPPC.Category
        AND Table1.price > MPPC.Price
于 2012-08-14T03:50:18.613 に答える
4

多分それを最大にしますか?

SELECT DISTINCT Table2.name, Table2.city, Table2.state
FROM Table1 INNER JOIN Table2 ON Table1.VendorID = Table2.VendorID
WHERE Table1.Category IN (49,50,45)
    AND Table1.price > (SELECT MAX(price) FROM Table1 WHERE VendorID = 69041 AND Category = IN (49,50,45))
于 2012-08-14T03:58:05.367 に答える