SQL SERVER - 根据现有列为列分配新值

时间:2014-04-15 11:15:07

标签: sql-server

在我的SQL Server 2012数据库中,我有一个包含两列的表,但它们的值太长,无法运行算法。

两列的值是另一个相互连接的表的ID,如

A | B,
B | C,
D | A

我想在同一个表上使用较短的值创建另外两列。我怎么能这样做?

基本上,我想翻译像

这样的东西
1234567890 | 0987654321, 
0987654321 | 5432167890 

进入

1 | 2,
2 | 3   
每行

3 个答案:

答案 0 :(得分:0)

您可能必须使用游标操作来执行此操作,以确保每个新主键和外键都相同。

答案 1 :(得分:0)

您可以使用“光标”对象翻译数据。

请查看http://technet.microsoft.com/en-us/library/ms180169.aspx

答案 2 :(得分:0)

您可以使用CTE将这些分成表格

Declare @t table(ID  INT IDENTITY , data varchar(max))
Insert into @t 
    Select '1234567890'  

;with cte as
(
  select ID,
         substring(data, 1, 1) as Chars,
         stuff(data, 1, 1, '') as data,
         1 as RowID
  from @t
  union all
  select ID,
         substring(data, 1, 1) as Chars,
         stuff(data, 1, 1, '') as data,
         RowID + 1 as RowID
  from cte
  where len(data) > 0
)
select  Chars
from cte
order by ID, RowID

然后,您需要在另一列中创建一个表达式,该表达式可以添加或增加当前行中的当前值。