簡體   English   中英

SQL查詢以獲取前[n]條記錄

[英]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

示例SQL提琴

這應該適用於2005年以后的所有版本的SQL Server(如果對的話我沒錯)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM