我有一张表格:
TABLE_ID NUMBER
0A 3
4B 2
...
是否可以提出以下内容:
0A 1
0A 2
0A 3
4B 1
4B 2
或更好(格式化)
0A001
0A002
0A003
4B001
4B002
...
因此,对于表中的每一行,在结果中重复与整数一样多的行并对它们进行编号。
答案 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
语句。
答案 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
。无论如何,也许你可以以某种方式使用它......