在SQL中生成尽可能多的行,并在列中生成整数

时间:2015-08-11 13:19:02

标签: mysql sql

我有一张表格:

    TABLE_ID   NUMBER

    0A         3
    4B         2
    ...

是否可以提出以下内容:

    0A 1
    0A 2
    0A 3
    4B 1
    4B 2

或更好(格式化)

    0A001
    0A002
    0A003
    4B001
    4B002
    ...

因此,对于表中的每一行,在结果中重复与整数一样多的行并对它们进行编号。

2 个答案:

答案 0 :(得分:2)

create table t (id varchar(10), num int);

insert into t values('0A',3);
insert into t values('4B',2);

create table nums (n int);

insert into nums values(1);
insert into nums values(2);
insert into nums values(3);
insert into nums values(4);
insert into nums values(5);
insert into nums values(6);

select concat(t.id,'00',nums.n)
from nums join t 
on nums.n <= t.num;

你可以试试这个。最好根据表中的最大数量使用循环来构造nums表。此外,您应该确定2位数字的模式,如果它们仍然应该包含2 0或1,并且类似于3,4,... n位数。您应该根据数字的长度在该方案中使用case语句。

SQL小提琴:http://sqlfiddle.com/#!9/21aa9/1

答案 1 :(得分:0)

您可以尝试以下内容:

declare @top int = 1000

declare @values table (Code varchar(10), Number int)
insert into @values (Code, Number) values ('0A', 3)
insert into @values (Code, Number) values ('4B', 2)

declare @Numbers table (ID int)

while @top > 0
    begin
        insert into @Numbers (ID) values (@top)
        set @top = @top - 1
    end


select 
    Code + right('000' + cast(ID as varchar(10)), 3)
from
    @values V
    inner join @Numbers N on V.Number >= N.ID
order by
    Code, 
    ID

哎呀!误导性标题...我在发布答案后发现这是关于mysql并且我的回答是MSSQL。无论如何,也许你可以以某种方式使用它......