我有3个表,我想将它们组合成2个新表。当前型号:
表X
Id Description
A Entry 1X
B Entry 2X
C Entry 3X
表Y
Id Description
1 1Y
2 2Y
3 3Y
现在有一个中间表,将这两个组合在一起,形成几种组合:
表Z
IdX IdY Number1 Number2
A 1 1000 2000
A 2 300 400
A 3 790 7900
B 1 99 999
C 1 5000 500
C 3 250 2500
我想要做的是将这些数据插入2个表格中。一个将再次成为中间,另一个包含IdX和IdY的所有组合(表'代码')。中间体将包含2个外键,它们也组合在一起PK' s。一个是员工,一个是表格代码')。除了这两个FK之外,这个表还将包含表Z的数量。两个新表的示例:
表格代码
Id Description
1 Entry 1X - 1Y
2 Entry 1X - 2Y
3 Entry 1X - 3Y
表中间
IdEmployee IdCode Number1 Number2
Petersen 1 1000 2000
Petersen 3 790 7900
Benjamin 1 1000 2000
Benjamin 2 300 400
Benjamin 3 790 7900
所以我搜索了这个具体的问题但是找不到完全相同的问题。我找到的最近的是:How can I INSERT data into two tables simultaneously in SQL Server?
但这是大约1条旧记录,插入到2个新表中,每个新表中有1条记录。我正在做的是在表格中插入新记录'代码'对于旧中间表中找到的X和Y的每个组合。然后我想在新的中间表中插入新记录,将所有新记录链接到'代码'表Employee中的所有现有记录。
到目前为止我所得到的:
insert into code (Id, Column1, Column2, Description)
OUTPUT inserted.Id INTO intermediate (codeId, EmployeeId, Z.Number1, Z.Number2)
select id,0,1,CONCAT(x.Description,' - ',y.Descritpion)
from dba.Z
left outer join dba.X as x on x.Id = IdX
left outer join dba.Y as y on y.Id = IdY
但这不会起作用,因为我没有一套员工。任何人都可以帮我解决问题吗?或者我真的需要使用光标吗?
注意:我已将源代码更改为匿名数据。
答案 0 :(得分:0)
分步进行。首先使用对现有表的引用创建表code
:code(id, description, idx, idy)
。
然后插入记录:
insert into code (idx, idy, description)
select x.id, y.id, x.description + ' - ' + y.description
from x
cross join y;
然后创建表intermediate
并填写它:
insert into intermediate (idcode, number1, number2, idemployee)
select code.id, z.number1, z.number2, employees.id
from code
join z on z.idx = code.idx and z.idy = code.idy
cross join employees;
然后,您可以从表格idx
中删除idy
和code
,然后删除旧表格。