按项目#和SQL Server中的位置对项目进行分区

时间:2014-10-24 20:05:59

标签: sql sql-server-2008 reporting-services ssrs-2008 reportbuilder3.0

鉴于我在TempTable中有以下数据集:

Item        Item Desc        Location       Qty      LeasedQty
----------------------------------------------------------------
IT2250      1/2CANTOP         NYC            1.00     30.00
IT5550      FCM 2K            NYC            6.00      8.00
IT2075      HPTL 750          LA             4.00     44.00
IT12506     DOUBLE DOOR 10"   CALI          60.00      0.00
IT3606      BAG180            CALI          25.00      0.00
IT3606      BAG180            NYC           20.00     40.00
IT3606      BAG180            LA             5.00     45.00
IT50        2K                NYC            6.00      8.00
IT50        2K                LA             4.00     44.00
IT50        2K                CALI          60.00      0.00 

如何对这些数据进行分区,使其与以下内容类似:

Item        Item Desc        Location       Qty      LeasedQty    RNK
----------------------------------------------------------------------
IT2250      1/2CANTOP         NYC            1.00     30.00        1
IT5550      FCM 2K            NYC            6.00      8.00        2
IT2075      HPTL 750          LA             4.00     44.00        3
IT12506     DOUBLE DOOR 10"   CALI          60.00      0.00        4
IT3606      BAG180            CALI          25.00      0.00        5
IT3606      BAG180            NYC           20.00     40.00        5
IT3606      BAG180            LA             5.00     45.00        5
IT50        2K                NYC            6.00      8.00        6
IT50        2K                LA             4.00     44.00        6
IT50        2K                CALI          60.00      0.00        6 

基本上,我希望数据按每个项目分组,并根据数量收集前20项(DESCENDING)

1 个答案:

答案 0 :(得分:0)

要获得该等级,这将有助于您

SELECT Dense_rank()
         OVER (
           ORDER BY Item) rnk,
       *
FROM   TempTable 

已添加以获得前20条记录

SELECT TOP 20 *
FROM   (SELECT Dense_rank()
                 OVER (
                   ORDER BY Item,qty desc) rnk,
               *
        FROM   TempTable) a
WHERE  rnk <= 20