【问题标题】:Partition Items by Item# and Location in SQL Server在 SQL Server 中按项目编号和位置对项目进行分区
【发布时间】:2014-10-24 20:05:59
【问题描述】:

鉴于我在 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 个项目

【问题讨论】:

  • 两个表都是一样的,只是添加了rnk,而且rnk不是按数量或项目排序的,你能详细说明一下吗?
  • @雷达。第二个表刚刚为 Group by ITEM(无论位置)添加了一个简单的计数。所以然后需要按数量订购这些并选择排名

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


【解决方案1】:

要获得该排名,这将对您有所帮助

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

【讨论】:

  • 感谢@Peadeep 的完美工作。现在有没有办法我可以做到这一点,并且还可以通过 DESC 订购数量?
  • @user2684009 - 立即查看
  • 那行不通。它所做的只是选择了 TOP 20 项目。但它并没有按数量 DESC 重新排序 RANK,然后获得 TOP 20 Items
  • @user2684009 - 现在移动数量并进行排名检查。如果您发布最终的预期输出,这将非常有帮助。
猜你喜欢
  • 1970-01-01
  • 2013-03-12
  • 2011-08-29
  • 2021-11-14
  • 1970-01-01
  • 2016-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多