如有一个表有两列,
bh num
A 2
B 3
C 4
要得到如下结果
bh bhex
A A.1
A A.2
B B.1
B B.2
B B.3
C C.1
C C.2
C C.3
C C.4
就是列bh 列根据列num 的值,进行扩展。本身+点+次数
如A的num 为2
那么就要变成两行,A A.1
A A.2
依此类推
------解决思路----------------------
SELECT T1.bh,T1.bh+'.'+CAST(T2.number AS VARCHAR(10)) AS num
FROM TB T1 JOIN master..spt_values T2 ON T2.type='P'
WHERE T2.number>0 AND T2.number<=T1.num
------解决思路----------------------
你这种切记不要用循环,实际上就是字符拼接。
------解决思路----------------------
--定义来源表
Declare @TmpA Table(
BH NVarchar(2),
Num Int)
--写入测试数据
Insert Into @TmpA
Select N'A',2
Union
Select N'B',3
Union
Select N'C',4
--定义新产生数据表
Declare @TmpB Table(
BH NVarchar(2),
BHex NVarchar(5))
--定义循环变量
Declare @BH NVarchar(2),@Num Int,@Step Int
--开始循环
While (Select COUNT(1) From @TmpA) > 0
Begin
Set @BH = (Select Top 1 BH From @TmpA)
Set @Num = (Select Num From @TmpA Where BH = @BH)
Set @Step = 1
--嵌套循环产生数据
While @Step <= @Num
Begin
Insert Into @TmpB
Select @BH,@BH + N'.' + Convert(NVarchar,@Step)
Set @Step = @Step + 1
End
--删除完成循环的记录
Delete From @TmpA Where BH = @BH
End
Select * From @TmpB