根据偶数在表中分配偶数FK

时间:2018-07-17 16:14:31

标签: c# asp.net sql-server c#-4.0 count

我有两个表,情况如下:

 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();

下一步是什么,如何实现?

有人可以帮我吗?

1 个答案:

答案 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;

这将产生一个“偶数”分配。