2012-10-08 91 views
0

我有一个ID(主键),名称,值和branchId作为列的查找表。目前,我有一组数据,其中branchId与整个记录相同。我需要为名称和值列复制具有相同值的数据,但在同一个表中有不同的branchId值。在查找表中为列ID的每个唯一值创建重复记录

任何帮助查询/脚本来实现这一点,将不胜感激。

在此先感谢!

+0

'id'数据类型'IDENTITY'还是简单的'INT'? –

回答

1

如果idIDENTITY,它的值将自动生成:

INSERT INTO tableX     --- the name of your table 
    (name, value, branchID) 
SELECT 
    name, value, 23     --- branch to be added 
FROM 
    tableX 
WHERE 
    branchID = 12 ;     --- the existing branch 

对于一组branchID值,你可以CROSS加入到现有的表(或创建一个在飞行):

INSERT INTO tableX      
    (name, value, branchID) 
SELECT 
    t.name, t.value, ins.branchID 
FROM 
     tableX AS t 
    CROSS JOIN 
     (VALUES 
      (1), (5), (7), (9), (10)  --- branchIDs to be inserted 
     ) AS ins (branchID) 
WHERE 
    t.branchID = 12 ;      --- the existing branchID 
+0

Ypercube ...这让我更接近。但是并不是硬编码每个新值(如你的例子中的23),我怎样才能循环这个值的范围?是否有可能将其推广? –

+0

你的意思是你想插入/复制这些行为多个分支? –

+0

没错。分支范围可以是一组值,例如{1,5,7,9,10}。 –

0

试试这个:

SELECT id, name, value, branchId, 
row_number() over (partition by name, value order by id) new_branch_id 
from tablename 
1
insert into LookupTable 
(
    name, 
    value, 
    branchId 
) 
select 
    name, 
    value, 
    'BranchId2' 
from LookupTable 
where branchId = 'BranchId1' 
+0

正如我对Ypercube所说的那样,我从你那里得到了类似的答复。我们怎样才能为一系列价值做到这一点,而不是硬编码每个新价值?是否有可能将其推广? –

相关问题