我有两个表,情况如下:
Table1
column1
column2
column3
column4
column5
表2的结构:
Table2
Col1
Col2
Col3
Table1FK
我的表1当前内部有3条记录,表2包含的记录将比表1多(这两者之间是一对多的关系)。我想将表2中的记录分配给表1 FK中的偶数。
例如:
如果表2有20条记录,而表1有3条记录
我将这两个数相除,得到偶数,在这种情况下为6.66。
因此,table1 PK的分配方式应类似
6-6-8
或
7 7 6(这个更均匀)
然后在标识下的表1 PK假设1500在表2中具有7个对应的FK,对于标识1501为7,对于标识1502为6
我的出发点应该是划分这些:
var evenAmountOfFKs = table2.Count()/table1.Count();
下一步是什么,如何实现?
有人可以帮我吗?
答案 0 :(得分:0)
不管这个要求看起来多么奇怪,数学都很有趣。
首先,我们必须确定父母的数量:
DECLARE @NoParents int = (SELECT COUNT(*) FROM Table1);
父母和孩子都可以从0
开始编号,然后可以用x = ChildNo % @NoParents
将孩子分配给父x:
DECLARE @NoParents int = (SELECT COUNT(*) FROM Table1);
WITH
Parents AS (
SELECT column1, column2, column3, column4, column5,
ROW_NUMBER() OVER(ORDER BY column1)-1 AS ParentNo
FROM Table1
),
Children AS (
SELECT Col1, Col1, Col1,
(ROW_NUMBER() OVER(ORDER BY Col1)-1) % @NoParents AS ParentNo
FROM Table2
)
SELECT p.column1, p.column2, p.column3, p.column4, p.column5, c.Col1, c.Col1
FROM Parents p
INNER JOIN Children c ON p.ParentNo = c.ParentNo;
这将产生一个“偶数”分配。