【问题标题】:How to repeat a record n times - SQL Server如何将一条记录重复 n 次 - SQL Server
【发布时间】:2020-06-18 02:03:10
【问题描述】:

我正在查询返回项目列表和拥有数量的网络数据。我需要把它翻译成多条记录——每个拥有的物品一个。例如,我可能会看到这样的结果:{"part_id": 118,"quantity": 3}。但在我的数据库中,我需要能够单独与每个项目进行交互,为它们分配位置、属性等。

看起来像这样:

Part_ID     CopyNum
-------------------
118         1
118         2
118         3

过去,我保留了一个名为 [Count] 的表,它只是一个从 1 到 100 的整数列表,我使用Count.Num <= Qty 的条件进行了交叉连接

我想在没有 Count 表的情况下执行此操作,这似乎是一个 hack。我怎样才能做到这一点?

【问题讨论】:

  • 我不太明白你在这里问什么。似乎您只想要一个计数来复制行。如果是这样,这是否回答了您的问题? Repeat Rows N Times According to Column Value(搜索您的问题标题很可能会为您提供该主题,就像对我一样)。如果不是,为什么不呢?您的数据是什么样的,您的预期结果是什么?
  • 我认为我根本不认为这是一个 hack。为这种事情保留一个数字表是很常见的

标签: sql-server tsql


【解决方案1】:

如果您没有计数/数字表(强烈推荐),您可以将临时计数表与 CROSS APPLY 配合使用

示例

Declare @YourTable Table ([Part_ID] int,[Quantity] int)  Insert Into @YourTable Values 
 (118,3)
,(125,2)

Select A.Part_ID
      ,CopyNum = B.N 
 From @YourTable A
 Cross Apply ( Select Top (Quantity) N=Row_Number() Over (Order By (Select NULL)) 
               From  master..spt_values n1, master..spt_values n2
            ) B

退货

Part_ID CopyNum
118     1
118     2
118     3
125     1
125     2

【讨论】:

    猜你喜欢
    • 2011-08-11
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多