我有一个ID(主键),名称,值和branchId作为列的查找表。目前,我有一组数据,其中branchId与整个记录相同。我需要为名称和值列复制具有相同值的数据,但在同一个表中有不同的branchId值。在查找表中为列ID的每个唯一值创建重复记录
任何帮助查询/脚本来实现这一点,将不胜感激。
在此先感谢!
我有一个ID(主键),名称,值和branchId作为列的查找表。目前,我有一组数据,其中branchId与整个记录相同。我需要为名称和值列复制具有相同值的数据,但在同一个表中有不同的branchId值。在查找表中为列ID的每个唯一值创建重复记录
任何帮助查询/脚本来实现这一点,将不胜感激。
在此先感谢!
如果id
是IDENTITY
,它的值将自动生成:
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
Ypercube ...这让我更接近。但是并不是硬编码每个新值(如你的例子中的23),我怎样才能循环这个值的范围?是否有可能将其推广? –
你的意思是你想插入/复制这些行为多个分支? –
没错。分支范围可以是一组值,例如{1,5,7,9,10}。 –
试试这个:
SELECT id, name, value, branchId,
row_number() over (partition by name, value order by id) new_branch_id
from tablename
insert into LookupTable
(
name,
value,
branchId
)
select
name,
value,
'BranchId2'
from LookupTable
where branchId = 'BranchId1'
正如我对Ypercube所说的那样,我从你那里得到了类似的答复。我们怎样才能为一系列价值做到这一点,而不是硬编码每个新价值?是否有可能将其推广? –
'id'数据类型'IDENTITY'还是简单的'INT'? –