【问题标题】:Arrange Data in buckets based on lower and upperlimit根据下限和上限排列存储桶中的数据
【发布时间】:2017-05-05 14:54:13
【问题描述】:

我遇到了一个问题,它让我把头上的所有头发都拔掉,以节省我以后去沙龙的时间。好的,这就去

总结

我有一个应用程序,它根据用户的上限和下限关联了一个审批者。因此,如果对于某个位置,如果金额为 200 美元,我必须选择一个批准者,那么它将检查该金额在上限和下限之间的位置,并相应地选择用户。

数据和期望的结果

这是我想要的结果

问题说明

对于结果集,我有存储桶(1-500、501-1000、1001-2500、2500-5000、5001 及以上),用于容纳低于上限和下限的用户。问题是如何存储数据。如果您注意到 locationID 1 的下限具有相互矛盾的值,例如有 2 个值为 1 的下限和不同的上限。同样,locationID 2 只有一条记录。这使得将用户放置在他们指定的存储桶中变得相当困难。我正在寻找解决方案。

我的尝试

我试图通过仅使用上限而不考虑下限来获得结果,但它会产生不良结果。我可以在此处发布查询,但明知这是错误的,我认为这不是必需的。另外,我很清楚这里的规则,所以如果有人想要我的威胁性查询

,请告诉我

请漂亮请保存我的头发(以及剩下的头发)。

【问题讨论】:

  • 这是报告还是查询?
  • 您可以将数据作为文本发布吗?图片无法复制到 SSMS
  • 为什么投反对票?
  • @RossBush 这是一个查询
  • @MikhailLobanov 我会尽快发布数据。

标签: sql sql-server tsql pivot


【解决方案1】:

示例

Select [LocationID]
      ,[1-500]     = [1]
      ,[501-1000]  = [2]
      ,[1001-2500] = [3]
      ,[2501-5000] = [4]
      ,[5001 plus] = [5]
From (
        Select Top 1 with ties 
               [LocationID]
              ,[Col] = Tier
              ,[Value] = Username
         From YourTable A
         Join (values (1   ,500   ,1)
                     ,(501 ,1000  ,2)
                     ,(1001,2500  ,3)
                     ,(2501,5000  ,4)
                     ,(5001,999999,5)
              ) B (R1,R2,Tier) on B.R1 between A.LowerLimit and A.UpperLimit
         Order By Row_Number() over (Partition By LocationID,B.Tier Order By UpperLimit)
     ) A
 Pivot (max([Value]) For [Col] in ([1],[2],[3],[4],[5]) ) p

退货

【讨论】:

  • 谢谢。从来不知道有类似 withTies 的东西。谢谢。你有博客之类的吗?
  • @ankitsuhail 很高兴它有帮助
【解决方案2】:

您希望每个位置有一条记录,因此这意味着您需要在LocationId 上对您的数据进行分组。然后你必须在每一列上做聚合函数。比如:

select LocationID,
    min(case when 1 between LowerLimit and UpplerLimit and 500 between LowerLimit and UpperLimit then Username end) [1-500],
    min(case when 501 between LowerLimit and UpplerLimit and 1000 between LowerLimit and UpperLimit then Username end) [501-1000],
    ... etc.
from DataTable
group by LocationID

如果数据范围内有任何重叠,它将按字母顺序选择列中最小的用户名(因为 min 函数)。如果未填充范围,则该列将为null

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 2013-05-07
    • 2014-12-06
    • 2017-11-01
    • 1970-01-01
    相关资源
    最近更新 更多