[英]SQL Query to get the top [n] records, with a twist
我有一個包含數十萬條記錄的清單表。 假設這些是前幾條記錄:
Item_Cat Item City Qty
---------------------------------
Furniture Table Boston 150
Furniture Table Phoenix 175
Furniture Table Tampa 300
Furniture Chair Dallas 150
Furniture Chair Boston 150
Furniture Chair LA 220
Furniture Chair Boise 50
Furniture Sofa Chicago 110
Hardware Hammer New York 750
Hardware Hammer LA 50
我如何獲得這樣的結果:
Item_Cat Item Max_City1 Max_Qty1 Max_City2 Max_Qty2
----------------------------------------------------------
Furniture Table Tampa 300 Phoenix 175
Furniture Chair LA 220 Boston 150
Furniture Sofa Chicago 110 NULL NULL
Hardware Hammer New York 750 LA 50
可以使用PIVOT功能嗎? 或者也許與其他SQL函數(也許是MAX,TOP n等)?
一種方法是使用窗口函數row_number()
並按item_cat和item進行分區,然后使用條件聚合。
這樣的事情應該起作用:
WITH cte AS (
SELECT
Item_Cat, Item, City, Qty,
rn = ROW_NUMBER() OVER (PARTITION BY Item_Cat, Item ORDER BY Qty DESC)
FROM t -- your table
)
SELECT
Item_Cat
, Item
, Max_City1 = MAX(CASE WHEN rn = 1 THEN City END)
, Max_Qty1 = MAX(CASE WHEN rn = 1 THEN Qty END)
, Max_City2 = MAX(CASE WHEN rn = 2 THEN City END)
, Max_Qty2 = MAX(CASE WHEN rn = 2 THEN Qty END)
FROM cte
GROUP BY Item_Cat, Item
ORDER BY Item_Cat, Max_qty1 DESC
這應該適用於2005年以后的所有版本的SQL Server(如果對的話我沒錯)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.