2010-10-17 58 views
1

如果我有水果表:sql server查詢 - 正在寫多個查詢的唯一方法?

FruitId ColorId NumofPurchased

我想爲每個colorId返回一行,其中NumOfPurchased是該colorId的最大值。我想通過循環訪問colorId或者手動爲10種顏色寫10個查詢......我不知道,有沒有更好/更優化的方法來做到這一點?

我正在使用SQL Server 2008 express。

回答

0

不確定這是否正是您想要的(無論是所有水果的每種顏色的最大值,還是每種水果的每種顏色的最大值) - 但您可以根據需要更改/添加PARTITION BY子句的值。

;with fruitCTE 
AS 
(
    SELECT FruitId, ColorId, NumofPurchased, 
      ROW_NUMBER() OVER (PARTITION BY ColorId, 
           ORDER BY NumofPurchased DESC 
          ) AS rn 
    FROM fruit 
) 
SELECT FruitId, ColorId, NumofPurchased, 
FROM fruitCTE 
WHERE rn = 1; 
1
SELECT MAX(NumOfPurchased), ColorId, FruitId 
FROM fruit 
GROUP BY ColorId, FruitId 

這應該做的伎倆。

+0

我在select子句中也需要fruitid,這會破壞代碼,因爲它不在group by子句或任何東西中。 – TPR 2010-10-17 06:16:05

+0

編輯我的答案包括此專欄。 – jwiscarson 2010-10-17 06:22:47

+0

然後它會列出結果中的所有水果(我剛剛檢查過)!我想選擇每種顏色最多購買數量的水果。 – TPR 2010-10-17 06:37:56