Създаването на матрица би било денормализиране на вашите данни. Обикновено това е най-добрата практикаНЕ за да направите това, тъй като прави манипулирането на данни много по-трудно, наред с други причини. Как бихте предотвратили редовете да са повече от 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
Можете да видите това в действие с Тази онлайн ДЕМО
Ето малко информация за нормализирането