sql - 如何将单行与sql中列中的数字相乘

标签 sql sql-server

就我而言,有订单和订单头寸。每个订单位置都有一个数量。例如:

enter image description here

但现在我需要每个“位置元素”一行。这是我想要的输出:

enter image description here

我的想法是使用rank()/over()来获取增量数字,但我不知道如何使用数量作为乘数。

是否有一个聪明的解决方案来使用单列作为“行乘法器”?在我的例子中,sql 函数或循环是不可能的,只是简单的 sql :)

谢谢! :)

<小时/>

通过来自 gvee 的查询,我能够为我的问题创建一个解决方案:

Select 
BelPosId as OrderPositionId, 
Artikelnummer as ProductId,  
Bezeichnung1 as ProductName,
Menge as Quantity,
NumberTable.number+1 as ElementId
FROM KHKVKBelegePositionen 

INNER JOIN 

(SELECT (a.number * 256) + b.number As number
FROM     (
        SELECT number
        FROM   master..spt_values
        WHERE  type = 'P'
        AND    number <= 255
       ) As a
 CROSS
  JOIN (
        SELECT number
        FROM   master..spt_values
        WHERE  type = 'P'
        AND    number <= 255
       ) As b) NumberTable

ON

NumberTable.number < Menge

诀窍是使用小于运算符将数字表中的“quantity”列inner join到“number”列,以模拟“乘法器”:

enter image description here

最佳答案

您可以使用不需要任何外部表的脚本:

SELECT t.quantity, 
       n.num 
FROM   table10 t 
       INNER JOIN (SELECT Row_number() 
                            OVER( 
                              ORDER BY object_id) num 
                   FROM   sys.all_objects) n 
               ON t.quantity >= n.num 

我没有包含其他列,但您只需将它们添加到选择列表

关于sql - 如何将单行与sql中列中的数字相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20540211/

相关文章:

mysql - 通过连接删除

mysql - sql SELECT查询不做相反的事情

sql - 将键值列分组为每组一行,每个键列

mysql - 非等价连接

sql-server - 如何为 GORM 关闭 IDENTITY_INSERT

mysql - SQL - 是否有相反但等效的 UNION 函数?

mysql - 我可以将事务与 ALTER TABLE 一起使用吗?

MySQL 变量在 case 表达式中不起作用

sql-server - 在同一硬件/物理服务器上运行的应用程序服务器和 Web 服务器

sql-server - 为什么合并命令有时会出现错误 `Attempting to set a non-NULL-able column' s value to NULL`?