2012-08-14 85 views
2

我在下面寫了查詢,它返回我需要的數據。但是,我不禁想到還有更好的方法來編寫它。我需要的是找到Table1中的所有唯一行,其價格大於指定供應商在供應商所屬類別中的價格。 (理論上,供應商可以屬於的類別數量不受限制)。同一列的多個WHERE子句

  • 表1是含有VendorIDCategory,和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) 
+0

類別表有vendoid嗎? – AnandPhadke 2012-08-14 03:49:54

+0

否。分類表只是一個類別和標識列表。 – RHPT 2012-08-14 14:56:55

回答

4

你可以使用一個公用表表達式或子查詢中,你首先需要的所有數據,以拉,然後加入你的表到「查看」:

;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 
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))