首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建从上行线路自动溢出的表6x6

创建从上行线路自动溢出的表6x6
EN

Stack Overflow用户
提问于 2018-04-25 23:56:15
回答 1查看 48关注 0票数 1

我正在为MMN公司创建一个代码。这个想法是一个系统,它有一个6x6的自动溢出表。

例如。

我登记了6个新的人。

  1. 约翰
  2. 彼得
  3. 玛丽
  4. 拉利
  5. 安德森
  6. 保罗

当我注册我的第七次,系统自动按照我下面的顺序,并投入约翰网络。当我在8号注册时,系统自动跟随我下面的命令,并投入彼得网络。

表6x6一级:6秒级: 36

我试图在sqlserver中创建一个带有存储过程的测试。

当我到达桌子的极限时,我被困在了该如何自动将注册的新人放在我下面的部分。

EN

回答 1

Stack Overflow用户

发布于 2018-04-26 13:39:59

创建一个矩阵将使您的数据去错误化。这样做通常是最好的实践--而不是,因为它使数据操作变得更加困难,还有其他原因。如何防止行超过6行?您必须添加一个类似这样的奇怪约束:

代码语言:javascript
运行
复制
create table #matrix ( ID int identity(1,1),
                        Name1 varchar(64),
                        Name2 varchar(64),
                        Name3 varchar(64),
                        Name4 varchar(64),
                        Name5 varchar(64),
                        Name6 varchar(64),
            CONSTRAINT ID_PK PRIMARY KEY (ID),
            CONSTRAINT Configuration_SixRows CHECK (ID <= 6))

我打赌您不会这样做,因此,您不能“确保”不超过6行插入到您的表中。如果要执行此操作,则必须每次插入数据一行,这与Server所涉及的所有内容都不一致。这将是检查第一列是否已满,然后移动到第二列,然后第三列,等等.这根本没道理。

相反,我会创建一个ParentID列来将您的名字与它们各自的网络联系起来,正如您所说的。这可以通过这样的计算列来完成:

代码语言:javascript
运行
复制
declare @table table (ID int identity(1,1), 
                      Names varchar(64), 
                      ParentID as case 
                                     when ID <= 6 then null 
                                     else replace(ID % 6,0,6) 
                                  end)

insert into @table
values
('John')
,('Peter')
,('Mary')
,('Lary')
,('Anderson')
,('Paul')
,('Seven')
,('Eight')
,('Nine')
,('Ten')
,('Eleven')
,('Twelve')
,('Thirteen')
,('Fourteen')


select * from @table

然后,如果您想在矩阵中显示它,您将使用PIVOT(),特别是动态轴。关于如何做到这一点,有很多关于Stack溢出的例子。这也解释了如果你想要矩阵大于6×N.也许网络在发展,所以每个成员都有50个人.因此,6(行)X 51 (列)

如果只有6列,或者没有更多列,那么也可以使用简单的连接逻辑.

代码语言:javascript
运行
复制
select
    t.ID
    ,t.Names
    ,t2.Names
    ,t3.Names
from @table t
left join
    @table t2 on t2.ParentID = t.ID and t2.ID = t.ID + 6
left join
    @table t3 on t3.ParentID = t.ID and t3.ID = t.ID + 12
--continue on
where
    t.ParentID is null

您可以在这个OnLine演示中看到这一点。

以下是一些关于规范化的信息

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50032887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档