【问题标题】:Create table 6 x 6 with automatic spill from upline创建表 6 x 6 并从上线自动溢出
【发布时间】:2018-04-25 23:56:15
【问题描述】:

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

例如。

我注册了 6 个新人。

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

当我注册我的第 7 个时,系统会自动按照我下面的顺序并放入 John 网络。当我第8次注册时,系统自动按照我下面的顺序进入彼得网络。

表 6 x 6 一级:6 第二级:36

我正在尝试使用 sqlserver 中的存储过程创建测试。

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

【问题讨论】:

  • 请向我们展示您目前所拥有的,我们将能够更好地提供帮助。
  • 强制为 6 x 6 矩阵。有专家吗?
  • 我有插入查询工作。我有一个 sp 来计算有多少用户注册了上线。现在我需要自动强制矩阵 6 x 6。
  • 下面的答案够吗?

标签: sql-server stored-procedures sql-server-2005


【解决方案1】:

创建矩阵将使您的数据非规范化。通常最好这样做,因为它使数据操作变得更加困难,以及其他原因。您将如何防止行数超过 6?你必须像这样添加一个奇怪的约束:

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 行。如果您这样做,那么您必须一次插入一行 数据,这与 SQL Server 的所有内容背道而驰。这将是检查第一列是否已满,然后移动到第二列,然后是第三列,等等......这没有意义。

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

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(),特别是Dynamic Pivot。 Stack Overflow 上有很多关于如何执行此操作的示例。这也说明了如果您希望矩阵大于 6 X N...也许网络会增长,因此每个成员都有 50 个个体...因此 6(行)X 51(列)

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

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

您可以通过 This OnLine DEMO

看到这一点

Here is some information on normalization

【讨论】:

    猜你喜欢
    • 2014-08-11
    • 2015-02-22
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 2010-12-06
    相关资源
    最近更新 更多