当前位置: 代码迷 >> Sql Server >> SQL里怎么做循环
  详细解决方案

SQL里怎么做循环

热度:96   发布时间:2016-04-24 09:18:41.0
SQL里如何做循环
如有一个表有两列,

 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
  相关解决方案