基于1列创建多行

时间:2018-12-14 18:04:30

标签: sql

我目前有一张桌子,上面有数量。

ID       Code            Quantity
1        A               1
2        B               3
3        C               2
4        D               1

反正有写一个让我明白的sql语句

ID       Code            Quantity
1        A               1
2        B               1
2        B               1
2        B               1
3        C               1
3        C               1
4        D               1

我需要弄清楚数量并有很多行

谢谢

3 个答案:

答案 0 :(得分:1)

以下是使用numbers表到join到以下位置的一种选择:

with numberstable as (
    select 1 AS Number
    union all
    select Number + 1 from numberstable where Number<100
    )
select t.id, t.code, 1 
from yourtable t 
    join numberstable n on t.quantity >= n.number 
order by t.id

请注意,根据您使用的数据库,这可能不是创建numbers表的正确方法。这在支持common table expressions的大多数数据库中都有效。但是答案的关键是joinon标准。

答案 1 :(得分:0)

一种方法是生成带有X个元素的数组(其中X是数量)。所以对于行

ID       Code            Quantity
1        A               1
2        B               3
3        C               2

你会得到

ID       Code            Quantity   ArrayVar
1        A               1          [1]
2        B               3          [1,2,3]
3        C               2          [2]

使用序列函数(例如,在PrestoDB中,sequence(start,stop)-> array(bigint))

然后,取消嵌套该数组的位置,因此对于每个ID,您将获得X行,并将数量设置为1。不确定您使用的是哪种SQL分发,但这应该可以工作!

答案 2 :(得分:0)

您可以使用connect by语句交叉连接表以获得所需的输出。 检查我的解决方案,它的功能非常强大。

export class TestComponent implements OnInit {
    constructor(){}
}