将数据从1个来源

时间:2016-05-13 09:58:51

标签: sql sql-server database

我有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

但这不会起作用,因为我没有一套员工。任何人都可以帮我解决问题吗?或者我真的需要使用光标吗?

注意:我已将源代码更改为匿名数据。

1 个答案:

答案 0 :(得分:0)

分步进行。首先使用对现有表的引用创建表codecode(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中删除idycode,然后删除旧表格。